[ios] Add Live Activity Widget for the TrackRecording #9482
114 changed files with 938 additions and 287 deletions
|
@ -118,7 +118,7 @@
|
|||
android:layout_marginTop="@dimen/margin_eighth"
|
||||
android:ellipsize="end"
|
||||
android:singleLine="true"
|
||||
android:text="@string/elevation_profile_maxaltitude"
|
||||
android:text="@string/elevation_profile_max_elevation"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body5" />
|
||||
<TextView
|
||||
android:id="@+id/max_altitude"
|
||||
|
@ -147,7 +147,7 @@
|
|||
android:layout_marginTop="@dimen/margin_eighth"
|
||||
android:ellipsize="end"
|
||||
android:singleLine="true"
|
||||
android:text="@string/elevation_profile_minaltitude"
|
||||
android:text="@string/elevation_profile_min_elevation"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body5" />
|
||||
<TextView
|
||||
android:id="@+id/min_altitude"
|
||||
|
|
|
@ -778,8 +778,8 @@
|
|||
<string name="isolines_location_error_dialog">الطبقة الطبوغرافية ليست متاحة بعد في هذه المنطقة</string>
|
||||
<string name="elevation_profile_ascent">تصاعدي</string>
|
||||
<string name="elevation_profile_descent">تنازلي</string>
|
||||
<string name="elevation_profile_minaltitude">الحد الأدنى للارتفاع</string>
|
||||
<string name="elevation_profile_maxaltitude">الحد الأقصى للارتفاع</string>
|
||||
<string name="elevation_profile_min_elevation">أقل ارتفاع</string>
|
||||
<string name="elevation_profile_max_elevation">أعلى ارتفاع</string>
|
||||
<string name="elevation_profile_difficulty">درجة الصعوبة</string>
|
||||
<string name="elevation_profile_distance">المسافة:</string>
|
||||
<string name="elevation_profile_time">المدة:</string>
|
||||
|
|
|
@ -763,8 +763,8 @@
|
|||
<string name="isolines_location_error_dialog">Bu bölgədə relyef təbəqəsi hələ mövcud deyil</string>
|
||||
<string name="elevation_profile_ascent">Qalxmaq</string>
|
||||
<string name="elevation_profile_descent">Eniş</string>
|
||||
<string name="elevation_profile_minaltitude">Min. hündürlük</string>
|
||||
<string name="elevation_profile_maxaltitude">Maks. hündürlük</string>
|
||||
<string name="elevation_profile_min_elevation">Min. hündürlük</string>
|
||||
<string name="elevation_profile_max_elevation">Maks. hündürlük</string>
|
||||
<string name="elevation_profile_difficulty">Çətinlik</string>
|
||||
<string name="elevation_profile_distance">Məsafə:</string>
|
||||
<string name="elevation_profile_time">Müddət:</string>
|
||||
|
|
|
@ -760,8 +760,8 @@
|
|||
<string name="isolines_location_error_dialog">Мапы рэльефа для гэтай мясцовасці пакуль што няма</string>
|
||||
<string name="elevation_profile_ascent">Пад\'ём</string>
|
||||
<string name="elevation_profile_descent">Спуск</string>
|
||||
<string name="elevation_profile_minaltitude">Мін. вышыня</string>
|
||||
<string name="elevation_profile_maxaltitude">Макс. вышыня</string>
|
||||
<string name="elevation_profile_min_elevation">Мін. вышыня</string>
|
||||
<string name="elevation_profile_max_elevation">Макс. вышыня</string>
|
||||
<string name="elevation_profile_difficulty">Складанасць</string>
|
||||
<string name="elevation_profile_distance">Адл.:</string>
|
||||
<string name="elevation_profile_time">Час:</string>
|
||||
|
|
|
@ -689,8 +689,8 @@
|
|||
<string name="isolines_location_error_dialog">Топографският слой все още не е наличен в тази област</string>
|
||||
<string name="elevation_profile_ascent">Изкачване</string>
|
||||
<string name="elevation_profile_descent">Спускане</string>
|
||||
<string name="elevation_profile_minaltitude">Мин. надморска височина</string>
|
||||
<string name="elevation_profile_maxaltitude">Макс. надморска височина</string>
|
||||
<string name="elevation_profile_min_elevation">Мин. височина</string>
|
||||
<string name="elevation_profile_max_elevation">Макс. височина</string>
|
||||
<string name="elevation_profile_difficulty">Трудност</string>
|
||||
<string name="elevation_profile_distance">Разст.:</string>
|
||||
<string name="elevation_profile_time">Време:</string>
|
||||
|
|
|
@ -768,8 +768,8 @@
|
|||
<string name="isolines_location_error_dialog">La capa topogràfica encara no és disponible en aquesta àrea</string>
|
||||
<string name="elevation_profile_ascent">Ascens</string>
|
||||
<string name="elevation_profile_descent">Descens</string>
|
||||
<string name="elevation_profile_minaltitude">Altitud mín.</string>
|
||||
<string name="elevation_profile_maxaltitude">Altitud màx.</string>
|
||||
<string name="elevation_profile_min_elevation">Min. elevació</string>
|
||||
<string name="elevation_profile_max_elevation">Màx. elevació</string>
|
||||
<string name="elevation_profile_difficulty">Dificultat</string>
|
||||
<string name="elevation_profile_distance">Dist.:</string>
|
||||
<string name="elevation_profile_time">Temps:</string>
|
||||
|
|
|
@ -736,8 +736,8 @@
|
|||
<string name="isolines_location_error_dialog">Topografická vrstva není v této oblasti ještě dostupná</string>
|
||||
<string name="elevation_profile_ascent">Stoupání</string>
|
||||
<string name="elevation_profile_descent">Klesání</string>
|
||||
<string name="elevation_profile_minaltitude">Min. nadmořská výška</string>
|
||||
<string name="elevation_profile_maxaltitude">Max. nadmořská výška</string>
|
||||
<string name="elevation_profile_min_elevation">Min. výška</string>
|
||||
<string name="elevation_profile_max_elevation">Max. výška</string>
|
||||
<string name="elevation_profile_difficulty">Obtížnost</string>
|
||||
<string name="elevation_profile_distance">Vzdál.:</string>
|
||||
<string name="elevation_profile_time">Čas:</string>
|
||||
|
|
|
@ -726,8 +726,8 @@
|
|||
<string name="isolines_location_error_dialog">Det topografiske lag er endnu ikke tilgængeligt i dette område</string>
|
||||
<string name="elevation_profile_ascent">Stige op</string>
|
||||
<string name="elevation_profile_descent">Stige ned</string>
|
||||
<string name="elevation_profile_minaltitude">Min. højde</string>
|
||||
<string name="elevation_profile_maxaltitude">Maks. højde</string>
|
||||
<string name="elevation_profile_min_elevation">Min. højde</string>
|
||||
<string name="elevation_profile_max_elevation">Maks. højde</string>
|
||||
<string name="elevation_profile_difficulty">Vanskelighed</string>
|
||||
<string name="elevation_profile_distance">Afs.:</string>
|
||||
<string name="elevation_profile_time">Tid:</string>
|
||||
|
|
|
@ -765,8 +765,8 @@
|
|||
<string name="isolines_location_error_dialog">Topographieebene ist für dieses Gebiet noch nicht verfügbar</string>
|
||||
<string name="elevation_profile_ascent">Bergauf</string>
|
||||
<string name="elevation_profile_descent">Bergab</string>
|
||||
<string name="elevation_profile_minaltitude">Min. Höhe</string>
|
||||
<string name="elevation_profile_maxaltitude">Max. Höhe</string>
|
||||
<string name="elevation_profile_min_elevation">Min. Höhe</string>
|
||||
<string name="elevation_profile_max_elevation">Max. Höhe</string>
|
||||
<string name="elevation_profile_difficulty">Schwierigkeitsgrad</string>
|
||||
<string name="elevation_profile_distance">Entf.:</string>
|
||||
<string name="elevation_profile_time">Dauer:</string>
|
||||
|
|
|
@ -764,8 +764,8 @@
|
|||
<string name="isolines_location_error_dialog">Οι υψομετρικές γραμμές δεν είναι ακόμα διαθέσιμες σε αυτή την περιοχή</string>
|
||||
<string name="elevation_profile_ascent">Ανάβαση</string>
|
||||
<string name="elevation_profile_descent">Κατάβαση</string>
|
||||
<string name="elevation_profile_minaltitude">Ελάχ. υψόμετρο</string>
|
||||
<string name="elevation_profile_maxaltitude">Μέγ. υψόμετρο</string>
|
||||
<string name="elevation_profile_min_elevation">Ελάχ. υψόμετρο</string>
|
||||
<string name="elevation_profile_max_elevation">Μέγ. υψόμετρο</string>
|
||||
<string name="elevation_profile_difficulty">Δυσκολία</string>
|
||||
<string name="elevation_profile_distance">Απόστ.:</string>
|
||||
<string name="elevation_profile_time">Διάρκ:</string>
|
||||
|
|
|
@ -200,8 +200,8 @@
|
|||
<string name="isolines_location_error_dialog">La altitud de relieve no está aún disponible en esta región</string>
|
||||
<string name="elevation_profile_ascent">Ascenso</string>
|
||||
<string name="elevation_profile_descent">Descenso</string>
|
||||
<string name="elevation_profile_minaltitude">Altura mínima</string>
|
||||
<string name="elevation_profile_maxaltitude">Altura máxima</string>
|
||||
<string name="elevation_profile_min_elevation">Min. elevación</string>
|
||||
<string name="elevation_profile_max_elevation">Máx. elevación</string>
|
||||
<string name="elevation_profile_difficulty">Dificultad</string>
|
||||
<string name="elevation_profile_distance">Distancia:</string>
|
||||
<string name="elevation_profile_time">Lapso:</string>
|
||||
|
|
|
@ -763,8 +763,8 @@
|
|||
<string name="isolines_location_error_dialog">La altitud de relieve aún no está disponible en esta región</string>
|
||||
<string name="elevation_profile_ascent">Ascenso</string>
|
||||
<string name="elevation_profile_descent">Descenso</string>
|
||||
<string name="elevation_profile_minaltitude">Altura mínima</string>
|
||||
<string name="elevation_profile_maxaltitude">Altura máxima</string>
|
||||
<string name="elevation_profile_min_elevation">Min. elevación</string>
|
||||
<string name="elevation_profile_max_elevation">Máx. elevación</string>
|
||||
<string name="elevation_profile_difficulty">Dificultad</string>
|
||||
<string name="elevation_profile_distance">Dist.:</string>
|
||||
<string name="elevation_profile_time">Tiempo:</string>
|
||||
|
|
|
@ -759,8 +759,8 @@
|
|||
<string name="isolines_location_error_dialog">Topograafiline kiht ei ole selles piirkonnas veel saadaval</string>
|
||||
<string name="elevation_profile_ascent">Tõus</string>
|
||||
<string name="elevation_profile_descent">Langus</string>
|
||||
<string name="elevation_profile_minaltitude">Min. kõrgus</string>
|
||||
<string name="elevation_profile_maxaltitude">Maks. kõrgus</string>
|
||||
<string name="elevation_profile_min_elevation">Min. kõrgus</string>
|
||||
<string name="elevation_profile_max_elevation">Maks. kõrgus</string>
|
||||
<string name="elevation_profile_difficulty">Raskusaste</string>
|
||||
<string name="elevation_profile_distance">Kaugus:</string>
|
||||
<string name="elevation_profile_time">Aeg:</string>
|
||||
|
|
|
@ -763,8 +763,8 @@
|
|||
<string name="isolines_location_error_dialog">Erliebearen altitudea oraindik ez dago eskuragarri eskualde honetan</string>
|
||||
<string name="elevation_profile_ascent">Maldan gora</string>
|
||||
<string name="elevation_profile_descent">Maldan behera</string>
|
||||
<string name="elevation_profile_minaltitude">Gutxieneko altuera</string>
|
||||
<string name="elevation_profile_maxaltitude">Gehieneko altuera</string>
|
||||
<string name="elevation_profile_min_elevation">Min. altuera</string>
|
||||
<string name="elevation_profile_max_elevation">Max. altuera</string>
|
||||
<string name="elevation_profile_difficulty">Zailtasuna</string>
|
||||
<string name="elevation_profile_distance">Distantzia:</string>
|
||||
<string name="elevation_profile_time">Denbora:</string>
|
||||
|
|
|
@ -724,8 +724,8 @@
|
|||
<string name="isolines_location_error_dialog">لایه توپوگرافی هنوز برای این منطقه در دسترس نیست</string>
|
||||
<string name="elevation_profile_ascent">بالا رفتن</string>
|
||||
<string name="elevation_profile_descent">پایین آمدن</string>
|
||||
<string name="elevation_profile_minaltitude">کمینه ارتفاع</string>
|
||||
<string name="elevation_profile_maxaltitude">بیشینه ارتفاع</string>
|
||||
<string name="elevation_profile_min_elevation">کم ارتفاع</string>
|
||||
<string name="elevation_profile_max_elevation">بیش ارتفاع</string>
|
||||
<string name="elevation_profile_difficulty">دشواری</string>
|
||||
<string name="elevation_profile_distance">مسافت</string>
|
||||
<string name="elevation_profile_time">زمان:</string>
|
||||
|
|
|
@ -764,8 +764,8 @@
|
|||
<string name="isolines_location_error_dialog">Korkeuskäyrät eivät ole vielä saatavilla tällä alueella</string>
|
||||
<string name="elevation_profile_ascent">Nousua</string>
|
||||
<string name="elevation_profile_descent">Laskua</string>
|
||||
<string name="elevation_profile_minaltitude">Min. korkeus</string>
|
||||
<string name="elevation_profile_maxaltitude">Maks. korkeus</string>
|
||||
<string name="elevation_profile_min_elevation">Min. korkeus</string>
|
||||
<string name="elevation_profile_max_elevation">Max. korkeus</string>
|
||||
<string name="elevation_profile_difficulty">Vaikeus</string>
|
||||
<string name="elevation_profile_distance">Etäisyys:</string>
|
||||
<string name="elevation_profile_time">Aika:</string>
|
||||
|
|
|
@ -770,8 +770,8 @@
|
|||
<string name="isolines_location_error_dialog">Les lignes d\'élévation ne sont pas encore disponibles dans cette région</string>
|
||||
<string name="elevation_profile_ascent">Montée</string>
|
||||
<string name="elevation_profile_descent">Descente</string>
|
||||
<string name="elevation_profile_minaltitude">Hauteur minimale</string>
|
||||
<string name="elevation_profile_maxaltitude">Hauteur maximale</string>
|
||||
<string name="elevation_profile_min_elevation">Min. élévation</string>
|
||||
<string name="elevation_profile_max_elevation">Max. élévation</string>
|
||||
<string name="elevation_profile_difficulty">Difficulté</string>
|
||||
<string name="elevation_profile_distance">Distance :</string>
|
||||
<string name="elevation_profile_time">Temps :</string>
|
||||
|
|
|
@ -741,8 +741,8 @@
|
|||
<string name="isolines_location_error_dialog">Ezen a területen a topográfiai réteg még nem elérhető</string>
|
||||
<string name="elevation_profile_ascent">Felemelkedés</string>
|
||||
<string name="elevation_profile_descent">Leereszkedés</string>
|
||||
<string name="elevation_profile_minaltitude">Min. magasság</string>
|
||||
<string name="elevation_profile_maxaltitude">Max. magasság</string>
|
||||
<string name="elevation_profile_min_elevation">Min. magasság</string>
|
||||
<string name="elevation_profile_max_elevation">Max. magasság</string>
|
||||
<string name="elevation_profile_difficulty">Nehézség</string>
|
||||
<string name="elevation_profile_distance">Táv.:</string>
|
||||
<string name="elevation_profile_time">Idő</string>
|
||||
|
|
|
@ -730,8 +730,8 @@
|
|||
<string name="isolines_location_error_dialog">Lapisan topografi belum tersedia untuk wilayah ini</string>
|
||||
<string name="elevation_profile_ascent">Menanjak</string>
|
||||
<string name="elevation_profile_descent">Menurun</string>
|
||||
<string name="elevation_profile_minaltitude">Ketinggian Min.</string>
|
||||
<string name="elevation_profile_maxaltitude">Ketinggian Maks.</string>
|
||||
<string name="elevation_profile_min_elevation">Min. tinggi</string>
|
||||
<string name="elevation_profile_max_elevation">Maks. tinggi</string>
|
||||
<string name="elevation_profile_difficulty">Kesulitan</string>
|
||||
<string name="elevation_profile_distance">Jarak:</string>
|
||||
<string name="elevation_profile_time">Waktu:</string>
|
||||
|
|
|
@ -752,8 +752,8 @@
|
|||
<string name="isolines_location_error_dialog">La modalità topografica per questa regione non è ancora disponibile</string>
|
||||
<string name="elevation_profile_ascent">Salita</string>
|
||||
<string name="elevation_profile_descent">Discesa</string>
|
||||
<string name="elevation_profile_minaltitude">Altitudine minima</string>
|
||||
<string name="elevation_profile_maxaltitude">Altitudine massima</string>
|
||||
<string name="elevation_profile_min_elevation">Min. elevazione</string>
|
||||
<string name="elevation_profile_max_elevation">Max. elevazione</string>
|
||||
<string name="elevation_profile_difficulty">Difficoltà</string>
|
||||
<string name="elevation_profile_distance">Dist.:</string>
|
||||
<string name="elevation_profile_time">Tempo:</string>
|
||||
|
|
|
@ -760,8 +760,8 @@
|
|||
<string name="isolines_location_error_dialog">קווי מתאר עוד לא זמינים לאזור זה</string>
|
||||
<string name="elevation_profile_ascent">עלייה</string>
|
||||
<string name="elevation_profile_descent">ירידה</string>
|
||||
<string name="elevation_profile_minaltitude">גובה מינימלי</string>
|
||||
<string name="elevation_profile_maxaltitude">גובה מקסימלי</string>
|
||||
<string name="elevation_profile_min_elevation">מינ\' גובה</string>
|
||||
<string name="elevation_profile_max_elevation">מקס\' גובה</string>
|
||||
<string name="elevation_profile_difficulty">קושי</string>
|
||||
<string name="elevation_profile_distance">מרחק:</string>
|
||||
<string name="elevation_profile_time">זמן:</string>
|
||||
|
|
|
@ -766,8 +766,8 @@
|
|||
<string name="isolines_location_error_dialog">地形レイヤーはこの地域ではまだ利用できません</string>
|
||||
<string name="elevation_profile_ascent">上昇</string>
|
||||
<string name="elevation_profile_descent">下降</string>
|
||||
<string name="elevation_profile_minaltitude">最小高度</string>
|
||||
<string name="elevation_profile_maxaltitude">最大高度</string>
|
||||
<string name="elevation_profile_min_elevation">最小標高</string>
|
||||
<string name="elevation_profile_max_elevation">最大標高</string>
|
||||
<string name="elevation_profile_difficulty">難易度</string>
|
||||
<string name="elevation_profile_distance">距離:</string>
|
||||
<string name="elevation_profile_time">時間:</string>
|
||||
|
|
|
@ -728,8 +728,8 @@
|
|||
<string name="isolines_location_error_dialog">이 지역의 지형 레이어는 아직 사용할 수 없습니다</string>
|
||||
<string name="elevation_profile_ascent">올라가기</string>
|
||||
<string name="elevation_profile_descent">내려가기</string>
|
||||
<string name="elevation_profile_minaltitude">산 최소 높이</string>
|
||||
<string name="elevation_profile_maxaltitude">산 최대 높이</string>
|
||||
<string name="elevation_profile_min_elevation">최소 높이</string>
|
||||
<string name="elevation_profile_max_elevation">최대 높이</string>
|
||||
<string name="elevation_profile_difficulty">난이도</string>
|
||||
<string name="elevation_profile_distance">거리:</string>
|
||||
<string name="elevation_profile_time">소비 시간:</string>
|
||||
|
|
|
@ -768,8 +768,8 @@
|
|||
<string name="isolines_location_error_dialog">Topogrāfiskais slānis šim reģionam nav pieejams</string>
|
||||
<string name="elevation_profile_ascent">Kāpums</string>
|
||||
<string name="elevation_profile_descent">Kritums</string>
|
||||
<string name="elevation_profile_minaltitude">Zemākais punkts</string>
|
||||
<string name="elevation_profile_maxaltitude">Augstākais punkts</string>
|
||||
<string name="elevation_profile_min_elevation">Zemākais punkts</string>
|
||||
<string name="elevation_profile_max_elevation">Augstākais punkts</string>
|
||||
<string name="elevation_profile_difficulty">Sarežģītība</string>
|
||||
<string name="elevation_profile_distance">Attālums:</string>
|
||||
<string name="elevation_profile_time">Laiks:</string>
|
||||
|
|
|
@ -732,8 +732,8 @@
|
|||
<string name="isolines_location_error_dialog">या भागात भूस्वरूप स्तर अद्याप उपलब्ध नाही</string>
|
||||
<string name="elevation_profile_ascent">चढण</string>
|
||||
<string name="elevation_profile_descent">उतरण</string>
|
||||
<string name="elevation_profile_minaltitude">किमान उच्चता</string>
|
||||
<string name="elevation_profile_maxaltitude">कमाल उच्चता</string>
|
||||
<string name="elevation_profile_min_elevation">किमान उंची</string>
|
||||
<string name="elevation_profile_max_elevation">कमाल उंची</string>
|
||||
<string name="elevation_profile_difficulty">काठिण्य</string>
|
||||
<string name="elevation_profile_distance">अंतर.:</string>
|
||||
<string name="elevation_profile_time">वेळ:</string>
|
||||
|
|
|
@ -763,8 +763,8 @@
|
|||
<string name="isolines_location_error_dialog">Høydekurver er ikke tilgjengelige i dette området ennå</string>
|
||||
<string name="elevation_profile_ascent">Stigning</string>
|
||||
<string name="elevation_profile_descent">Nedstigning</string>
|
||||
<string name="elevation_profile_minaltitude">Min. høyde</string>
|
||||
<string name="elevation_profile_maxaltitude">Maks. høyde</string>
|
||||
<string name="elevation_profile_min_elevation">Min. høyde</string>
|
||||
<string name="elevation_profile_max_elevation">Maks. høyde</string>
|
||||
<string name="elevation_profile_difficulty">Vanskelighet</string>
|
||||
<string name="elevation_profile_distance">Avstand:</string>
|
||||
<string name="elevation_profile_time">I rute</string>
|
||||
|
|
|
@ -763,8 +763,8 @@
|
|||
<string name="isolines_location_error_dialog">Hoogtelijnen zijn nog niet beschikbaar in deze regio</string>
|
||||
<string name="elevation_profile_ascent">Stijging</string>
|
||||
<string name="elevation_profile_descent">Daling</string>
|
||||
<string name="elevation_profile_minaltitude">Min. hoogte</string>
|
||||
<string name="elevation_profile_maxaltitude">Max. hoogte</string>
|
||||
<string name="elevation_profile_min_elevation">Min. hoogte</string>
|
||||
<string name="elevation_profile_max_elevation">Max. hoogte</string>
|
||||
<string name="elevation_profile_difficulty">Moeilijkheid</string>
|
||||
<string name="elevation_profile_distance">Afst.:</string>
|
||||
<string name="elevation_profile_time">Tijd:</string>
|
||||
|
|
|
@ -769,8 +769,8 @@
|
|||
<string name="isolines_location_error_dialog">Poziomice nie są jeszcze dostępne w tym regionie</string>
|
||||
<string name="elevation_profile_ascent">Wejście</string>
|
||||
<string name="elevation_profile_descent">Zejście</string>
|
||||
<string name="elevation_profile_minaltitude">Min. wysokość</string>
|
||||
<string name="elevation_profile_maxaltitude">Maks. wysokość</string>
|
||||
<string name="elevation_profile_min_elevation">Min. wysokość</string>
|
||||
<string name="elevation_profile_max_elevation">Maks. wysokość</string>
|
||||
<string name="elevation_profile_difficulty">Trudność</string>
|
||||
<string name="elevation_profile_distance">Odległ.:</string>
|
||||
<string name="elevation_profile_time">Trasa:</string>
|
||||
|
|
|
@ -691,8 +691,8 @@
|
|||
<string name="button_layer_isolines">Relevo</string>
|
||||
<string name="isolines_activation_error_dialog">Para ativar e usar a camada Relevo, atualize ou baixe o mapa da região</string>
|
||||
<string name="isolines_location_error_dialog">A camada Relevo ainda não está disponível para esta região</string>
|
||||
<string name="elevation_profile_minaltitude">Altitude mínima</string>
|
||||
<string name="elevation_profile_maxaltitude">Altitude máxima</string>
|
||||
<string name="elevation_profile_min_elevation">Min. elevação</string>
|
||||
<string name="elevation_profile_max_elevation">Máx. elevação</string>
|
||||
<string name="elevation_profile_distance">Dist.:</string>
|
||||
<string name="elevation_profile_time">Tempo:</string>
|
||||
<string name="isolines_toast_zooms_1_10">Use o zoom para explorar as isolinhas</string>
|
||||
|
|
|
@ -741,8 +741,8 @@
|
|||
<string name="isolines_location_error_dialog">A camada Terreno ainda não está disponível nesta área</string>
|
||||
<string name="elevation_profile_ascent">Subida</string>
|
||||
<string name="elevation_profile_descent">Descida</string>
|
||||
<string name="elevation_profile_minaltitude">Altura mínima</string>
|
||||
<string name="elevation_profile_maxaltitude">Altura máxima</string>
|
||||
<string name="elevation_profile_min_elevation">Min. elevação</string>
|
||||
<string name="elevation_profile_max_elevation">Máx. elevação</string>
|
||||
<string name="elevation_profile_difficulty">Dificuldade</string>
|
||||
<string name="elevation_profile_distance">Distância:</string>
|
||||
<string name="elevation_profile_time">Tempo:</string>
|
||||
|
|
|
@ -751,8 +751,8 @@
|
|||
<string name="isolines_location_error_dialog">Stratul topografic nu este încă disponibil în această zonă</string>
|
||||
<string name="elevation_profile_ascent">Urcare</string>
|
||||
<string name="elevation_profile_descent">Coborâre</string>
|
||||
<string name="elevation_profile_minaltitude">Înălțime minimă</string>
|
||||
<string name="elevation_profile_maxaltitude">Înălțime maximă</string>
|
||||
<string name="elevation_profile_min_elevation">Min. altitudine</string>
|
||||
<string name="elevation_profile_max_elevation">Max. altitudine</string>
|
||||
<string name="elevation_profile_difficulty">Dificultate</string>
|
||||
<string name="elevation_profile_distance">Dist.:</string>
|
||||
<string name="elevation_profile_time">Timp:</string>
|
||||
|
|
|
@ -777,8 +777,8 @@
|
|||
<string name="isolines_location_error_dialog">Линии высот пока не доступны в этом регионе</string>
|
||||
<string name="elevation_profile_ascent">Подъём</string>
|
||||
<string name="elevation_profile_descent">Спуск</string>
|
||||
<string name="elevation_profile_minaltitude">Мин. высота</string>
|
||||
<string name="elevation_profile_maxaltitude">Макс. высота</string>
|
||||
<string name="elevation_profile_min_elevation">Мин. высота</string>
|
||||
<string name="elevation_profile_max_elevation">Макс. высота</string>
|
||||
<string name="elevation_profile_difficulty">Сложность</string>
|
||||
<string name="elevation_profile_distance">Расст.:</string>
|
||||
<string name="elevation_profile_time">В пути:</string>
|
||||
|
|
|
@ -763,8 +763,8 @@
|
|||
<string name="isolines_location_error_dialog">Topografická vrstva ešte nie je v tejto oblasti k dispozícii</string>
|
||||
<string name="elevation_profile_ascent">Stúpanie</string>
|
||||
<string name="elevation_profile_descent">Klesanie</string>
|
||||
<string name="elevation_profile_minaltitude">Min. nadmorská výška</string>
|
||||
<string name="elevation_profile_maxaltitude">Max. nadmorská výška</string>
|
||||
<string name="elevation_profile_min_elevation">Min. výška</string>
|
||||
<string name="elevation_profile_max_elevation">Max. výška</string>
|
||||
<string name="elevation_profile_difficulty">Obtiažnosť</string>
|
||||
<string name="elevation_profile_distance">Vzdial.:</string>
|
||||
<string name="elevation_profile_time">Čas:</string>
|
||||
|
|
|
@ -767,8 +767,6 @@
|
|||
<string name="isolines_location_error_dialog">Изолиније нису доступне за ову област</string>
|
||||
<string name="elevation_profile_ascent">Успон</string>
|
||||
<string name="elevation_profile_descent">Спуст</string>
|
||||
<string name="elevation_profile_minaltitude">Мин. висина</string>
|
||||
<string name="elevation_profile_maxaltitude">Макс. висина</string>
|
||||
<string name="elevation_profile_difficulty">Тежина</string>
|
||||
<string name="elevation_profile_distance">Удаљ.:</string>
|
||||
<string name="elevation_profile_time">Време:</string>
|
||||
|
|
|
@ -728,8 +728,8 @@
|
|||
<string name="isolines_location_error_dialog">Höjningslinjer är ännu inte tillgängligt i den här regionen</string>
|
||||
<string name="elevation_profile_ascent">Stigning</string>
|
||||
<string name="elevation_profile_descent">Backe</string>
|
||||
<string name="elevation_profile_minaltitude">Min. höjd</string>
|
||||
<string name="elevation_profile_maxaltitude">Max. höjd</string>
|
||||
<string name="elevation_profile_min_elevation">Min. höjd</string>
|
||||
<string name="elevation_profile_max_elevation">Max. höjd</string>
|
||||
<string name="elevation_profile_difficulty">Svårighet</string>
|
||||
<string name="elevation_profile_distance">Avst.:</string>
|
||||
<string name="elevation_profile_time">Tid:</string>
|
||||
|
|
|
@ -304,8 +304,8 @@
|
|||
<string name="isolines_location_error_dialog">Tabaka la sura ya nchi bado haipatikani katika eneo hili</string>
|
||||
<string name="elevation_profile_ascent">Upandaji</string>
|
||||
<string name="elevation_profile_descent">Ushukaji</string>
|
||||
<string name="elevation_profile_minaltitude">Mwinuko wa chini kabisa</string>
|
||||
<string name="elevation_profile_maxaltitude">Mwinuko wa juu kabisa</string>
|
||||
<string name="elevation_profile_min_elevation">Min. mwinuko</string>
|
||||
<string name="elevation_profile_max_elevation">Max. mwinuko</string>
|
||||
<string name="elevation_profile_difficulty">Ugumu</string>
|
||||
<string name="elevation_profile_distance">Umbali:</string>
|
||||
<string name="elevation_profile_time">Muda:</string>
|
||||
|
|
|
@ -731,8 +731,8 @@
|
|||
<string name="isolines_location_error_dialog">เลเยอร์แผนที่ภูมิประเทศยังใช้งานไม่ได้ในพื้นที่นี้</string>
|
||||
<string name="elevation_profile_ascent">การขึ้น</string>
|
||||
<string name="elevation_profile_descent">การลง</string>
|
||||
<string name="elevation_profile_minaltitude">ระดับความสูงต่ำสุด</string>
|
||||
<string name="elevation_profile_maxaltitude">ระดับความสูงสูงสุด</string>
|
||||
<string name="elevation_profile_min_elevation">ต่ำสุด</string>
|
||||
<string name="elevation_profile_max_elevation">สูงสุด</string>
|
||||
<string name="elevation_profile_difficulty">ลำบาก</string>
|
||||
<string name="elevation_profile_distance">ระยะทาง</string>
|
||||
<string name="elevation_profile_time">เวลา:</string>
|
||||
|
|
|
@ -766,8 +766,8 @@
|
|||
<string name="isolines_location_error_dialog">Arazi katmanı henüz bu bölgede mevcut değil</string>
|
||||
<string name="elevation_profile_ascent">Tırmanış</string>
|
||||
<string name="elevation_profile_descent">İniş</string>
|
||||
<string name="elevation_profile_minaltitude">Min. rakım</string>
|
||||
<string name="elevation_profile_maxaltitude">Maks. rakım</string>
|
||||
<string name="elevation_profile_min_elevation">Min. yükselti</string>
|
||||
<string name="elevation_profile_max_elevation">Maks. yükselti</string>
|
||||
<string name="elevation_profile_difficulty">Zorluk</string>
|
||||
<string name="elevation_profile_distance">Mesafe:</string>
|
||||
<string name="elevation_profile_time">Süre:</string>
|
||||
|
|
|
@ -772,8 +772,8 @@
|
|||
<string name="isolines_location_error_dialog">Лінії висот ще недоступні в цьому регіоні</string>
|
||||
<string name="elevation_profile_ascent">Підйом</string>
|
||||
<string name="elevation_profile_descent">Спуск</string>
|
||||
<string name="elevation_profile_minaltitude">Мін. висота</string>
|
||||
<string name="elevation_profile_maxaltitude">Макс. висота</string>
|
||||
<string name="elevation_profile_min_elevation">Мін. висота</string>
|
||||
<string name="elevation_profile_max_elevation">Макс. висота</string>
|
||||
<string name="elevation_profile_difficulty">Складність</string>
|
||||
<string name="elevation_profile_distance">Відст.:</string>
|
||||
<string name="elevation_profile_time">Шлях:</string>
|
||||
|
|
|
@ -729,8 +729,8 @@
|
|||
<string name="isolines_location_error_dialog">Đường hiển thị độ cao hiện chưa khả dụng tại khu vực này</string>
|
||||
<string name="elevation_profile_ascent">Đi lên</string>
|
||||
<string name="elevation_profile_descent">Đi xuống</string>
|
||||
<string name="elevation_profile_minaltitude">Độ cao tối thiểu</string>
|
||||
<string name="elevation_profile_maxaltitude">Độ cao tối đa</string>
|
||||
<string name="elevation_profile_min_elevation">Min. độ cao</string>
|
||||
<string name="elevation_profile_max_elevation">Max. độ cao</string>
|
||||
<string name="elevation_profile_difficulty">Độ khó</string>
|
||||
<string name="elevation_profile_distance">Khoảng cách</string>
|
||||
<string name="elevation_profile_time">Giờ:</string>
|
||||
|
|
|
@ -776,8 +776,8 @@
|
|||
<string name="isolines_location_error_dialog">暫時無法獲取該地區的等高線</string>
|
||||
<string name="elevation_profile_ascent">上坡</string>
|
||||
<string name="elevation_profile_descent">下坡</string>
|
||||
<string name="elevation_profile_minaltitude">最小高度</string>
|
||||
<string name="elevation_profile_maxaltitude">最大高度</string>
|
||||
<string name="elevation_profile_min_elevation">最低高度</string>
|
||||
<string name="elevation_profile_max_elevation">最高高度</string>
|
||||
<string name="elevation_profile_difficulty">難度</string>
|
||||
<string name="elevation_profile_distance">距離:</string>
|
||||
<string name="elevation_profile_time">時間:</string>
|
||||
|
|
|
@ -776,8 +776,8 @@
|
|||
<string name="isolines_location_error_dialog">暂时无法获取该地区的等高线</string>
|
||||
<string name="elevation_profile_ascent">上坡</string>
|
||||
<string name="elevation_profile_descent">下坡</string>
|
||||
<string name="elevation_profile_minaltitude">最小高度</string>
|
||||
<string name="elevation_profile_maxaltitude">最大高度</string>
|
||||
<string name="elevation_profile_min_elevation">最低高度</string>
|
||||
<string name="elevation_profile_max_elevation">最高高度</string>
|
||||
<string name="elevation_profile_difficulty">难度</string>
|
||||
<string name="elevation_profile_distance">距离:</string>
|
||||
<string name="elevation_profile_time">时间:</string>
|
||||
|
|
|
@ -796,8 +796,8 @@
|
|||
<string name="isolines_location_error_dialog">Contour lines are not yet available in this area</string>
|
||||
<string name="elevation_profile_ascent">Ascent</string>
|
||||
<string name="elevation_profile_descent">Descent</string>
|
||||
<string name="elevation_profile_minaltitude">Min. altitude</string>
|
||||
<string name="elevation_profile_maxaltitude">Max. altitude</string>
|
||||
<string name="elevation_profile_min_elevation">Min. elevation</string>
|
||||
<string name="elevation_profile_max_elevation">Max. elevation</string>
|
||||
<string name="elevation_profile_difficulty">Difficulty</string>
|
||||
<string name="elevation_profile_distance">Dist.:</string>
|
||||
<string name="elevation_profile_time">Time:</string>
|
||||
|
|
|
@ -29411,99 +29411,97 @@
|
|||
zh-Hans = 下坡
|
||||
zh-Hant = 下坡
|
||||
|
||||
[elevation_profile_minaltitude]
|
||||
[elevation_profile_min_elevation]
|
||||
tags = android,ios
|
||||
en = Min. altitude
|
||||
en = Min. elevation
|
||||
af = Min. hoogte
|
||||
ar = الحد الأدنى للارتفاع
|
||||
ar = أقل ارتفاع
|
||||
az = Min. hündürlük
|
||||
be = Мін. вышыня
|
||||
bg = Мин. надморска височина
|
||||
ca = Altitud mín.
|
||||
cs = Min. nadmořská výška
|
||||
bg = Мин. височина
|
||||
ca = Min. elevació
|
||||
cs = Min. výška
|
||||
da = Min. højde
|
||||
de = Min. Höhe
|
||||
el = Ελάχ. υψόμετρο
|
||||
es = Altura mínima
|
||||
es-MX = Altura mínima
|
||||
es = Min. elevación
|
||||
es-MX = Min. elevación
|
||||
et = Min. kõrgus
|
||||
eu = Gutxieneko altuera
|
||||
fa = کمینه ارتفاع
|
||||
eu = Min. altuera
|
||||
fa = کم ارتفاع
|
||||
fi = Min. korkeus
|
||||
fr = Hauteur minimale
|
||||
he = גובה מינימלי
|
||||
fr = Min. élévation
|
||||
he = מינ' גובה
|
||||
hu = Min. magasság
|
||||
id = Ketinggian Min.
|
||||
it = Altitudine minima
|
||||
ja = 最小高度
|
||||
ko = 산 최소 높이
|
||||
lt = Maž. aukštis
|
||||
id = Min. tinggi
|
||||
it = Min. elevazione
|
||||
ja = 最小標高
|
||||
ko = 최소 높이
|
||||
lt = Min. aukštis
|
||||
lv = Zemākais punkts
|
||||
mr = किमान उच्चता
|
||||
mr = किमान उंची
|
||||
nb = Min. høyde
|
||||
nl = Min. hoogte
|
||||
pl = Min. wysokość
|
||||
pt = Altura mínima
|
||||
pt-BR = Altitude mínima
|
||||
ro = Înălțime minimă
|
||||
pt = Min. elevação
|
||||
pt-BR = Min. elevação
|
||||
ro = Min. altitudine
|
||||
ru = Мин. высота
|
||||
sk = Min. nadmorská výška
|
||||
sr = Мин. висина
|
||||
sk = Min. výška
|
||||
sv = Min. höjd
|
||||
sw = Mwinuko wa chini kabisa
|
||||
th = ระดับความสูงต่ำสุด
|
||||
tr = Min. rakım
|
||||
sw = Min. mwinuko
|
||||
th = ต่ำสุด
|
||||
tr = Min. yükselti
|
||||
uk = Мін. висота
|
||||
vi = Độ cao tối thiểu
|
||||
zh-Hans = 最小高度
|
||||
zh-Hant = 最小高度
|
||||
vi = Min. độ cao
|
||||
zh-Hans = 最低高度
|
||||
zh-Hant = 最低高度
|
||||
|
||||
[elevation_profile_maxaltitude]
|
||||
[elevation_profile_max_elevation]
|
||||
tags = android,ios
|
||||
en = Max. altitude
|
||||
en = Max. elevation
|
||||
af = Maks. hoogte
|
||||
ar = الحد الأقصى للارتفاع
|
||||
ar = أعلى ارتفاع
|
||||
az = Maks. hündürlük
|
||||
be = Макс. вышыня
|
||||
bg = Макс. надморска височина
|
||||
ca = Altitud màx.
|
||||
cs = Max. nadmořská výška
|
||||
bg = Макс. височина
|
||||
ca = Màx. elevació
|
||||
cs = Max. výška
|
||||
da = Maks. højde
|
||||
de = Max. Höhe
|
||||
el = Μέγ. υψόμετρο
|
||||
es = Altura máxima
|
||||
es-MX = Altura máxima
|
||||
es = Máx. elevación
|
||||
es-MX = Máx. elevación
|
||||
et = Maks. kõrgus
|
||||
eu = Gehieneko altuera
|
||||
fa = بیشینه ارتفاع
|
||||
fi = Maks. korkeus
|
||||
fr = Hauteur maximale
|
||||
he = גובה מקסימלי
|
||||
eu = Max. altuera
|
||||
fa = بیش ارتفاع
|
||||
fi = Max. korkeus
|
||||
fr = Max. élévation
|
||||
he = מקס' גובה
|
||||
hu = Max. magasság
|
||||
id = Ketinggian Maks.
|
||||
it = Altitudine massima
|
||||
ja = 最大高度
|
||||
ko = 산 최대 높이
|
||||
id = Maks. tinggi
|
||||
it = Max. elevazione
|
||||
ja = 最大標高
|
||||
ko = 최대 높이
|
||||
lt = Didž. aukštis
|
||||
lv = Augstākais punkts
|
||||
mr = कमाल उच्चता
|
||||
mr = कमाल उंची
|
||||
nb = Maks. høyde
|
||||
nl = Max. hoogte
|
||||
pl = Maks. wysokość
|
||||
pt = Altura máxima
|
||||
pt-BR = Altitude máxima
|
||||
ro = Înălțime maximă
|
||||
pt = Máx. elevação
|
||||
pt-BR = Máx. elevação
|
||||
ro = Max. altitudine
|
||||
ru = Макс. высота
|
||||
sk = Max. nadmorská výška
|
||||
sr = Макс. висина
|
||||
sk = Max. výška
|
||||
sv = Max. höjd
|
||||
sw = Mwinuko wa juu kabisa
|
||||
th = ระดับความสูงสูงสุด
|
||||
tr = Maks. rakım
|
||||
sw = Max. mwinuko
|
||||
th = สูงสุด
|
||||
tr = Maks. yükselti
|
||||
uk = Макс. висота
|
||||
vi = Độ cao tối đa
|
||||
zh-Hans = 最大高度
|
||||
zh-Hant = 最大高度
|
||||
vi = Max. độ cao
|
||||
zh-Hans = 最高高度
|
||||
zh-Hant = 最高高度
|
||||
|
||||
[elevation_profile_difficulty]
|
||||
tags = android,ios
|
||||
|
|
|
@ -32,7 +32,7 @@ static inline BOOL isIOSVersionLessThan(NSUInteger version)
|
|||
return isIOSVersionLessThanString([NSString stringWithFormat:@"%@", @(version)]);
|
||||
}
|
||||
|
||||
static inline BOOL isInterfaceRightToLeft(void)
|
||||
static inline BOOL isInterfaceRightToLeft(void) NS_EXTENSION_UNAVAILABLE_IOS("Not available in extensions")
|
||||
{
|
||||
return UIApplication.sharedApplication.userInterfaceLayoutDirection ==
|
||||
UIUserInterfaceLayoutDirectionRightToLeft;
|
||||
|
@ -50,7 +50,7 @@ static inline BOOL equalScreenDimensions(CGFloat left, CGFloat right)
|
|||
return fabs(left - right) < 0.5;
|
||||
}
|
||||
|
||||
static inline CGFloat statusBarHeight(void)
|
||||
static inline CGFloat statusBarHeight(void) NS_EXTENSION_UNAVAILABLE_IOS("Not available in extensions")
|
||||
{
|
||||
CGSize const statusBarSize = UIApplication.sharedApplication.statusBarFrame.size;
|
||||
return MIN(statusBarSize.height, statusBarSize.width);
|
||||
|
|
|
@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@property (nonatomic, readonly) NSString * maxElevation;
|
||||
@property (nonatomic, readonly) NSString * minElevation;
|
||||
|
||||
+ (TrackRecordingInfo *)emptyInfo;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
|
|
@ -5,6 +5,10 @@
|
|||
|
||||
@implementation TrackRecordingInfo
|
||||
|
||||
+ (TrackRecordingInfo *)emptyInfo {
|
||||
return [[TrackRecordingInfo alloc] initWithGpsTrackInfo:GpsTrackInfo()];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation TrackRecordingInfo (Core)
|
||||
|
|
|
@ -136,7 +136,7 @@ final class TrackRecordingViewController: MWMViewController {
|
|||
@objc
|
||||
private func onTrackRecordingButtonPressed(_ sender: Any) {
|
||||
switch trackRecordingManager.recordingState {
|
||||
case .inactive, .error:
|
||||
case .inactive:
|
||||
trackRecordingManager.processAction(.start)
|
||||
case .active:
|
||||
trackRecordingManager.processAction(.stop)
|
||||
|
|
|
@ -101,6 +101,7 @@ using namespace osm_auth_ios;
|
|||
NSTimeInterval const minimumBackgroundFetchIntervalInSeconds = 6 * 60 * 60;
|
||||
[UIApplication.sharedApplication setMinimumBackgroundFetchInterval:minimumBackgroundFetchIntervalInSeconds];
|
||||
[self updateApplicationIconBadgeNumber];
|
||||
[TrackRecordingManager.shared setup];
|
||||
}
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
import ActivityKit
|
||||
|
||||
#if canImport(ActivityKit)
|
||||
|
||||
protocol TrackRecordingActivityManager {
|
||||
func start(with info: TrackRecordingInfo) throws
|
||||
func update(_ info: TrackRecordingInfo)
|
||||
func stop()
|
||||
}
|
||||
|
||||
@available(iOS 16.2, *)
|
||||
final class TrackRecordingLiveActivityManager {
|
||||
|
||||
static let shared = TrackRecordingLiveActivityManager()
|
||||
|
||||
private var activity: Activity<TrackRecordingLiveActivityAttributes>?
|
||||
|
||||
private init() {}
|
||||
}
|
||||
|
||||
// MARK: - TrackRecordingActivityManager
|
||||
|
||||
@available(iOS 16.2, *)
|
||||
extension TrackRecordingLiveActivityManager: TrackRecordingActivityManager {
|
||||
func start(with info: TrackRecordingInfo) throws {
|
||||
guard activity == nil else { return }
|
||||
let state = TrackRecordingLiveActivityAttributes.ContentState(trackInfo: info)
|
||||
let content = ActivityContent<TrackRecordingLiveActivityAttributes.ContentState>(state: state, staleDate: nil)
|
||||
let attributes = TrackRecordingLiveActivityAttributes()
|
||||
activity = try LiveActivityManager.startActivity(attributes, content: content)
|
||||
}
|
||||
|
||||
func update(_ info: TrackRecordingInfo) {
|
||||
guard let activity else { return }
|
||||
let state = TrackRecordingLiveActivityAttributes.ContentState(trackInfo: info)
|
||||
let content = ActivityContent<TrackRecordingLiveActivityAttributes.ContentState>(state: state, staleDate: nil)
|
||||
LiveActivityManager.update(activity, content: content)
|
||||
}
|
||||
|
||||
func stop() {
|
||||
guard let activity else { return }
|
||||
LiveActivityManager.stop(activity)
|
||||
self.activity = nil
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Wrap TrackRecordingInfo to TrackRecordingLiveActivityAttributes.ContentState
|
||||
|
||||
private extension TrackRecordingLiveActivityAttributes.ContentState {
|
||||
init(trackInfo: TrackRecordingInfo) {
|
||||
self.distance = StatisticsViewModel(key: "", value: trackInfo.distance)
|
||||
self.duration = StatisticsViewModel(key: "", value: trackInfo.duration)
|
||||
self.maxElevation = StatisticsViewModel(key: L("elevation_profile_max_elevation"), value: trackInfo.maxElevation)
|
||||
self.minElevation = StatisticsViewModel(key: L("elevation_profile_min_elevation"), value: trackInfo.minElevation)
|
||||
self.ascent = StatisticsViewModel(key: L("elevation_profile_ascent"), value: trackInfo.ascent)
|
||||
self.descent = StatisticsViewModel(key: L("elevation_profile_descent"), value: trackInfo.descent)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1,10 +1,9 @@
|
|||
enum TrackRecordingState: Equatable {
|
||||
case inactive
|
||||
case active
|
||||
case error(TrackRecordingError)
|
||||
}
|
||||
|
||||
enum TrackRecordingAction {
|
||||
enum TrackRecordingAction: String, CaseIterable {
|
||||
case start
|
||||
case stop
|
||||
}
|
||||
|
@ -13,6 +12,11 @@ enum TrackRecordingError: Error {
|
|||
case locationIsProhibited
|
||||
}
|
||||
|
||||
protocol TrackRecordingObserver: AnyObject {
|
||||
func addObserver(_ observer: AnyObject, recordingIsActiveDidChangeHandler: @escaping TrackRecordingStateHandler)
|
||||
func removeObserver(_ observer: AnyObject)
|
||||
}
|
||||
|
||||
typealias TrackRecordingStateHandler = (Bool) -> Void
|
||||
|
||||
@objcMembers
|
||||
|
@ -30,20 +34,48 @@ final class TrackRecordingManager: NSObject {
|
|||
var recordingStateDidChangeHandler: TrackRecordingStateHandler?
|
||||
}
|
||||
|
||||
static let shared: TrackRecordingManager = TrackRecordingManager(trackRecorder: FrameworkHelper.self)
|
||||
static let shared: TrackRecordingManager = {
|
||||
let trackRecorder = FrameworkHelper.self
|
||||
var activityManager: TrackRecordingActivityManager? = nil
|
||||
#if canImport(ActivityKit)
|
||||
if #available(iOS 16.2, *) {
|
||||
activityManager = TrackRecordingLiveActivityManager.shared
|
||||
}
|
||||
#endif
|
||||
return TrackRecordingManager(trackRecorder: trackRecorder, activityManager: activityManager)
|
||||
}()
|
||||
|
||||
private let trackRecorder: TrackRecorder.Type
|
||||
private var activityManager: TrackRecordingActivityManager?
|
||||
private var observations: [Observation] = []
|
||||
private(set) var recordingState: TrackRecordingState = .inactive {
|
||||
didSet {
|
||||
notifyObservers()
|
||||
}
|
||||
private var trackRecordingInfo: TrackRecordingInfo?
|
||||
|
||||
var recordingState: TrackRecordingState {
|
||||
trackRecorder.isTrackRecordingEnabled() ? .active : .inactive
|
||||
}
|
||||
|
||||
private init(trackRecorder: TrackRecorder.Type) {
|
||||
private init(trackRecorder: TrackRecorder.Type, activityManager: TrackRecordingActivityManager?) {
|
||||
self.trackRecorder = trackRecorder
|
||||
self.activityManager = activityManager
|
||||
super.init()
|
||||
self.recordingState = getCurrentRecordingState()
|
||||
subscribeOnAppLifecycleEvents()
|
||||
}
|
||||
|
||||
// MARK: - Public methods
|
||||
|
||||
@objc
|
||||
func setup() {
|
||||
do {
|
||||
try checkIsLocationEnabled()
|
||||
switch recordingState {
|
||||
case .inactive:
|
||||
break
|
||||
case .active:
|
||||
subscribeOnTrackRecordingProgressUpdates()
|
||||
}
|
||||
} catch {
|
||||
handleError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
|
@ -60,50 +92,73 @@ final class TrackRecordingManager: NSObject {
|
|||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
func addObserver(_ observer: AnyObject, recordingIsActiveDidChangeHandler: @escaping TrackRecordingStateHandler) {
|
||||
let observation = Observation(observer: observer, recordingStateDidChangeHandler: recordingIsActiveDidChangeHandler)
|
||||
observations.append(observation)
|
||||
recordingIsActiveDidChangeHandler(recordingState == .active)
|
||||
}
|
||||
// MARK: - Private methods
|
||||
|
||||
@objc
|
||||
func removeObserver(_ observer: AnyObject) {
|
||||
observations.removeAll { $0.observer === observer }
|
||||
}
|
||||
|
||||
private func notifyObservers() {
|
||||
observations = observations.filter { $0.observer != nil }
|
||||
observations.forEach { $0.recordingStateDidChangeHandler?(recordingState == .active) }
|
||||
}
|
||||
|
||||
private func handleError(_ error: TrackRecordingError, completion: (CompletionHandler)? = nil) {
|
||||
switch error {
|
||||
case .locationIsProhibited:
|
||||
// Show alert to enable location
|
||||
LocationManager.checkLocationStatus()
|
||||
}
|
||||
stopRecording(.withoutSaving, completion: completion)
|
||||
}
|
||||
|
||||
private func getCurrentRecordingState() -> TrackRecordingState {
|
||||
private func checkIsLocationEnabled() throws {
|
||||
guard !LocationManager.isLocationProhibited() else {
|
||||
return .error(.locationIsProhibited)
|
||||
throw TrackRecordingError.locationIsProhibited
|
||||
}
|
||||
return trackRecorder.isTrackRecordingEnabled() ? .active : .inactive
|
||||
}
|
||||
|
||||
// MARK: - Handle lifecycle events
|
||||
|
||||
private func subscribeOnAppLifecycleEvents() {
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.willResignActiveNotification, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(prepareForTermination), name: UIApplication.willTerminateNotification, object: nil)
|
||||
}
|
||||
|
||||
@objc
|
||||
private func willResignActive() {
|
||||
guard let activityManager, recordingState == .active else { return }
|
||||
do {
|
||||
try activityManager.start(with: trackRecordingInfo ?? .empty())
|
||||
} catch {
|
||||
handleError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
private func willEnterForeground() {
|
||||
activityManager?.stop()
|
||||
}
|
||||
|
||||
@objc
|
||||
private func prepareForTermination() {
|
||||
activityManager?.stop()
|
||||
}
|
||||
|
||||
// MARK: - Handle track recording process
|
||||
|
||||
private func subscribeOnTrackRecordingProgressUpdates() {
|
||||
trackRecorder.setTrackRecordingUpdateHandler { [weak self] info in
|
||||
guard let self else { return }
|
||||
self.trackRecordingInfo = info
|
||||
self.activityManager?.update(info)
|
||||
}
|
||||
}
|
||||
|
||||
private func unsubscribeFromTrackRecordingProgressUpdates() {
|
||||
trackRecorder.setTrackRecordingUpdateHandler(nil)
|
||||
trackRecordingInfo = nil
|
||||
}
|
||||
|
||||
// MARK: - Handle Start/Stop event and Errors
|
||||
|
||||
private func start(completion: (CompletionHandler)? = nil) {
|
||||
let state = getCurrentRecordingState()
|
||||
switch state {
|
||||
case .inactive:
|
||||
trackRecorder.startTrackRecording()
|
||||
recordingState = .active
|
||||
do {
|
||||
try checkIsLocationEnabled()
|
||||
switch recordingState {
|
||||
case .inactive:
|
||||
subscribeOnTrackRecordingProgressUpdates()
|
||||
trackRecorder.startTrackRecording()
|
||||
notifyObservers()
|
||||
case .active:
|
||||
break
|
||||
}
|
||||
completion?()
|
||||
case .active:
|
||||
completion?()
|
||||
case .error(let trackRecordingError):
|
||||
handleError(trackRecordingError, completion: completion)
|
||||
} catch {
|
||||
handleError(error, completion: completion)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -128,18 +183,32 @@ final class TrackRecordingManager: NSObject {
|
|||
}
|
||||
|
||||
private func stopRecording(_ savingOption: SavingOption, completion: (CompletionHandler)? = nil) {
|
||||
unsubscribeFromTrackRecordingProgressUpdates()
|
||||
trackRecorder.stopTrackRecording()
|
||||
activityManager?.stop()
|
||||
notifyObservers()
|
||||
switch savingOption {
|
||||
case .withoutSaving:
|
||||
break
|
||||
case .saveWithName(let name):
|
||||
trackRecorder.saveTrackRecording(withName: name)
|
||||
}
|
||||
recordingState = .inactive
|
||||
completion?()
|
||||
}
|
||||
|
||||
private static func showOnFinishRecordingAlert(onSave: @escaping CompletionHandler,
|
||||
|
||||
private func handleError(_ error: Error, completion: (CompletionHandler)? = nil) {
|
||||
LOG(.error, error.localizedDescription)
|
||||
switch error {
|
||||
case TrackRecordingError.locationIsProhibited:
|
||||
// Show alert to enable location
|
||||
LocationManager.checkLocationStatus()
|
||||
default:
|
||||
break
|
||||
}
|
||||
stopRecording(.withoutSaving, completion: completion)
|
||||
}
|
||||
|
||||
private static func showOnFinishRecordingAlert(onSave: @escaping CompletionHandler,
|
||||
onStop: @escaping CompletionHandler,
|
||||
onContinue: @escaping CompletionHandler) {
|
||||
let alert = UIAlertController(title: L("track_recording_alert_title"), message: nil, preferredStyle: .alert)
|
||||
|
@ -149,3 +218,24 @@ final class TrackRecordingManager: NSObject {
|
|||
UIViewController.topViewController().present(alert, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - TrackRecordingObserver
|
||||
|
||||
extension TrackRecordingManager: TrackRecordingObserver {
|
||||
@objc
|
||||
func addObserver(_ observer: AnyObject, recordingIsActiveDidChangeHandler: @escaping TrackRecordingStateHandler) {
|
||||
let observation = Observation(observer: observer, recordingStateDidChangeHandler: recordingIsActiveDidChangeHandler)
|
||||
observations.append(observation)
|
||||
recordingIsActiveDidChangeHandler(recordingState == .active)
|
||||
}
|
||||
|
||||
@objc
|
||||
func removeObserver(_ observer: AnyObject) {
|
||||
observations.removeAll { $0.observer === observer }
|
||||
}
|
||||
|
||||
private func notifyObservers() {
|
||||
observations = observations.filter { $0.observer != nil }
|
||||
observations.forEach { $0.recordingStateDidChangeHandler?(recordingState == .active) }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "تنازلي";
|
||||
|
||||
"elevation_profile_minaltitude" = "الحد الأدنى للارتفاع";
|
||||
"elevation_profile_min_elevation" = "أقل ارتفاع";
|
||||
|
||||
"elevation_profile_maxaltitude" = "الحد الأقصى للارتفاع";
|
||||
"elevation_profile_max_elevation" = "أعلى ارتفاع";
|
||||
|
||||
"elevation_profile_difficulty" = "درجة الصعوبة";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Eniş";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. hündürlük";
|
||||
"elevation_profile_min_elevation" = "Min. hündürlük";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Maks. hündürlük";
|
||||
"elevation_profile_max_elevation" = "Maks. hündürlük";
|
||||
|
||||
"elevation_profile_difficulty" = "Çətinlik";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Спуск";
|
||||
|
||||
"elevation_profile_minaltitude" = "Мін. вышыня";
|
||||
"elevation_profile_min_elevation" = "Мін. вышыня";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Макс. вышыня";
|
||||
"elevation_profile_max_elevation" = "Макс. вышыня";
|
||||
|
||||
"elevation_profile_difficulty" = "Складанасць";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Спускане";
|
||||
|
||||
"elevation_profile_minaltitude" = "Мин. надморска височина";
|
||||
"elevation_profile_min_elevation" = "Мин. височина";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Макс. надморска височина";
|
||||
"elevation_profile_max_elevation" = "Макс. височина";
|
||||
|
||||
"elevation_profile_difficulty" = "Трудност";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descens";
|
||||
|
||||
"elevation_profile_minaltitude" = "Altitud mín.";
|
||||
"elevation_profile_min_elevation" = "Min. elevació";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Altitud màx.";
|
||||
"elevation_profile_max_elevation" = "Màx. elevació";
|
||||
|
||||
"elevation_profile_difficulty" = "Dificultat";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Klesání";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. nadmořská výška";
|
||||
"elevation_profile_min_elevation" = "Min. výška";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. nadmořská výška";
|
||||
"elevation_profile_max_elevation" = "Max. výška";
|
||||
|
||||
"elevation_profile_difficulty" = "Obtížnost";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Stige ned";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. højde";
|
||||
"elevation_profile_min_elevation" = "Min. højde";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Maks. højde";
|
||||
"elevation_profile_max_elevation" = "Maks. højde";
|
||||
|
||||
"elevation_profile_difficulty" = "Vanskelighed";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Bergab";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. Höhe";
|
||||
"elevation_profile_min_elevation" = "Min. Höhe";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. Höhe";
|
||||
"elevation_profile_max_elevation" = "Max. Höhe";
|
||||
|
||||
"elevation_profile_difficulty" = "Schwierigkeitsgrad";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Κατάβαση";
|
||||
|
||||
"elevation_profile_minaltitude" = "Ελάχ. υψόμετρο";
|
||||
"elevation_profile_min_elevation" = "Ελάχ. υψόμετρο";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Μέγ. υψόμετρο";
|
||||
"elevation_profile_max_elevation" = "Μέγ. υψόμετρο";
|
||||
|
||||
"elevation_profile_difficulty" = "Δυσκολία";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descent";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. altitude";
|
||||
"elevation_profile_min_elevation" = "Min. elevation";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. altitude";
|
||||
"elevation_profile_max_elevation" = "Max. elevation";
|
||||
|
||||
"elevation_profile_difficulty" = "Difficulty";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descent";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. altitude";
|
||||
"elevation_profile_min_elevation" = "Min. elevation";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. altitude";
|
||||
"elevation_profile_max_elevation" = "Max. elevation";
|
||||
|
||||
"elevation_profile_difficulty" = "Difficulty";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descenso";
|
||||
|
||||
"elevation_profile_minaltitude" = "Altura mínima";
|
||||
"elevation_profile_min_elevation" = "Min. elevación";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Altura máxima";
|
||||
"elevation_profile_max_elevation" = "Máx. elevación";
|
||||
|
||||
"elevation_profile_difficulty" = "Dificultad";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descenso";
|
||||
|
||||
"elevation_profile_minaltitude" = "Altura mínima";
|
||||
"elevation_profile_min_elevation" = "Min. elevación";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Altura máxima";
|
||||
"elevation_profile_max_elevation" = "Máx. elevación";
|
||||
|
||||
"elevation_profile_difficulty" = "Dificultad";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Langus";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. kõrgus";
|
||||
"elevation_profile_min_elevation" = "Min. kõrgus";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Maks. kõrgus";
|
||||
"elevation_profile_max_elevation" = "Maks. kõrgus";
|
||||
|
||||
"elevation_profile_difficulty" = "Raskusaste";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Maldan behera";
|
||||
|
||||
"elevation_profile_minaltitude" = "Gutxieneko altuera";
|
||||
"elevation_profile_min_elevation" = "Min. altuera";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Gehieneko altuera";
|
||||
"elevation_profile_max_elevation" = "Max. altuera";
|
||||
|
||||
"elevation_profile_difficulty" = "Zailtasuna";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "پایین آمدن";
|
||||
|
||||
"elevation_profile_minaltitude" = "کمینه ارتفاع";
|
||||
"elevation_profile_min_elevation" = "کم ارتفاع";
|
||||
|
||||
"elevation_profile_maxaltitude" = "بیشینه ارتفاع";
|
||||
"elevation_profile_max_elevation" = "بیش ارتفاع";
|
||||
|
||||
"elevation_profile_difficulty" = "دشواری";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Laskua";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. korkeus";
|
||||
"elevation_profile_min_elevation" = "Min. korkeus";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Maks. korkeus";
|
||||
"elevation_profile_max_elevation" = "Max. korkeus";
|
||||
|
||||
"elevation_profile_difficulty" = "Vaikeus";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descente";
|
||||
|
||||
"elevation_profile_minaltitude" = "Hauteur minimale";
|
||||
"elevation_profile_min_elevation" = "Min. élévation";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Hauteur maximale";
|
||||
"elevation_profile_max_elevation" = "Max. élévation";
|
||||
|
||||
"elevation_profile_difficulty" = "Difficulté";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "ירידה";
|
||||
|
||||
"elevation_profile_minaltitude" = "גובה מינימלי";
|
||||
"elevation_profile_min_elevation" = "מינ' גובה";
|
||||
|
||||
"elevation_profile_maxaltitude" = "גובה מקסימלי";
|
||||
"elevation_profile_max_elevation" = "מקס' גובה";
|
||||
|
||||
"elevation_profile_difficulty" = "קושי";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descent";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. altitude";
|
||||
"elevation_profile_min_elevation" = "Min. elevation";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. altitude";
|
||||
"elevation_profile_max_elevation" = "Max. elevation";
|
||||
|
||||
"elevation_profile_difficulty" = "Difficulty";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Leereszkedés";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. magasság";
|
||||
"elevation_profile_min_elevation" = "Min. magasság";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. magasság";
|
||||
"elevation_profile_max_elevation" = "Max. magasság";
|
||||
|
||||
"elevation_profile_difficulty" = "Nehézség";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Menurun";
|
||||
|
||||
"elevation_profile_minaltitude" = "Ketinggian Min.";
|
||||
"elevation_profile_min_elevation" = "Min. tinggi";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Ketinggian Maks.";
|
||||
"elevation_profile_max_elevation" = "Maks. tinggi";
|
||||
|
||||
"elevation_profile_difficulty" = "Kesulitan";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Discesa";
|
||||
|
||||
"elevation_profile_minaltitude" = "Altitudine minima";
|
||||
"elevation_profile_min_elevation" = "Min. elevazione";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Altitudine massima";
|
||||
"elevation_profile_max_elevation" = "Max. elevazione";
|
||||
|
||||
"elevation_profile_difficulty" = "Difficoltà";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "下降";
|
||||
|
||||
"elevation_profile_minaltitude" = "最小高度";
|
||||
"elevation_profile_min_elevation" = "最小標高";
|
||||
|
||||
"elevation_profile_maxaltitude" = "最大高度";
|
||||
"elevation_profile_max_elevation" = "最大標高";
|
||||
|
||||
"elevation_profile_difficulty" = "難易度";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "내려가기";
|
||||
|
||||
"elevation_profile_minaltitude" = "산 최소 높이";
|
||||
"elevation_profile_min_elevation" = "최소 높이";
|
||||
|
||||
"elevation_profile_maxaltitude" = "산 최대 높이";
|
||||
"elevation_profile_max_elevation" = "최대 높이";
|
||||
|
||||
"elevation_profile_difficulty" = "난이도";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Kritums";
|
||||
|
||||
"elevation_profile_minaltitude" = "Zemākais punkts";
|
||||
"elevation_profile_min_elevation" = "Zemākais punkts";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Augstākais punkts";
|
||||
"elevation_profile_max_elevation" = "Augstākais punkts";
|
||||
|
||||
"elevation_profile_difficulty" = "Sarežģītība";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "उतरण";
|
||||
|
||||
"elevation_profile_minaltitude" = "किमान उच्चता";
|
||||
"elevation_profile_min_elevation" = "किमान उंची";
|
||||
|
||||
"elevation_profile_maxaltitude" = "कमाल उच्चता";
|
||||
"elevation_profile_max_elevation" = "कमाल उंची";
|
||||
|
||||
"elevation_profile_difficulty" = "काठिण्य";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Nedstigning";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. høyde";
|
||||
"elevation_profile_min_elevation" = "Min. høyde";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Maks. høyde";
|
||||
"elevation_profile_max_elevation" = "Maks. høyde";
|
||||
|
||||
"elevation_profile_difficulty" = "Vanskelighet";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Daling";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. hoogte";
|
||||
"elevation_profile_min_elevation" = "Min. hoogte";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. hoogte";
|
||||
"elevation_profile_max_elevation" = "Max. hoogte";
|
||||
|
||||
"elevation_profile_difficulty" = "Moeilijkheid";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Zejście";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. wysokość";
|
||||
"elevation_profile_min_elevation" = "Min. wysokość";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Maks. wysokość";
|
||||
"elevation_profile_max_elevation" = "Maks. wysokość";
|
||||
|
||||
"elevation_profile_difficulty" = "Trudność";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descida";
|
||||
|
||||
"elevation_profile_minaltitude" = "Altitude mínima";
|
||||
"elevation_profile_min_elevation" = "Min. elevação";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Altitude máxima";
|
||||
"elevation_profile_max_elevation" = "Máx. elevação";
|
||||
|
||||
"elevation_profile_difficulty" = "Dificuldade";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Descida";
|
||||
|
||||
"elevation_profile_minaltitude" = "Altura mínima";
|
||||
"elevation_profile_min_elevation" = "Min. elevação";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Altura máxima";
|
||||
"elevation_profile_max_elevation" = "Máx. elevação";
|
||||
|
||||
"elevation_profile_difficulty" = "Dificuldade";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Coborâre";
|
||||
|
||||
"elevation_profile_minaltitude" = "Înălțime minimă";
|
||||
"elevation_profile_min_elevation" = "Min. altitudine";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Înălțime maximă";
|
||||
"elevation_profile_max_elevation" = "Max. altitudine";
|
||||
|
||||
"elevation_profile_difficulty" = "Dificultate";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Спуск";
|
||||
|
||||
"elevation_profile_minaltitude" = "Мин. высота";
|
||||
"elevation_profile_min_elevation" = "Мин. высота";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Макс. высота";
|
||||
"elevation_profile_max_elevation" = "Макс. высота";
|
||||
|
||||
"elevation_profile_difficulty" = "Сложность";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Klesanie";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. nadmorská výška";
|
||||
"elevation_profile_min_elevation" = "Min. výška";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. nadmorská výška";
|
||||
"elevation_profile_max_elevation" = "Max. výška";
|
||||
|
||||
"elevation_profile_difficulty" = "Obtiažnosť";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Спуст";
|
||||
|
||||
"elevation_profile_minaltitude" = "Мин. висина";
|
||||
"elevation_profile_min_elevation" = "Min. elevation";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Макс. висина";
|
||||
"elevation_profile_max_elevation" = "Max. elevation";
|
||||
|
||||
"elevation_profile_difficulty" = "Тежина";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Backe";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. höjd";
|
||||
"elevation_profile_min_elevation" = "Min. höjd";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Max. höjd";
|
||||
"elevation_profile_max_elevation" = "Max. höjd";
|
||||
|
||||
"elevation_profile_difficulty" = "Svårighet";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Ushukaji";
|
||||
|
||||
"elevation_profile_minaltitude" = "Mwinuko wa chini kabisa";
|
||||
"elevation_profile_min_elevation" = "Min. mwinuko";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Mwinuko wa juu kabisa";
|
||||
"elevation_profile_max_elevation" = "Max. mwinuko";
|
||||
|
||||
"elevation_profile_difficulty" = "Ugumu";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "การลง";
|
||||
|
||||
"elevation_profile_minaltitude" = "ระดับความสูงต่ำสุด";
|
||||
"elevation_profile_min_elevation" = "ต่ำสุด";
|
||||
|
||||
"elevation_profile_maxaltitude" = "ระดับความสูงสูงสุด";
|
||||
"elevation_profile_max_elevation" = "สูงสุด";
|
||||
|
||||
"elevation_profile_difficulty" = "ลำบาก";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "İniş";
|
||||
|
||||
"elevation_profile_minaltitude" = "Min. rakım";
|
||||
"elevation_profile_min_elevation" = "Min. yükselti";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Maks. rakım";
|
||||
"elevation_profile_max_elevation" = "Maks. yükselti";
|
||||
|
||||
"elevation_profile_difficulty" = "Zorluk";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Спуск";
|
||||
|
||||
"elevation_profile_minaltitude" = "Мін. висота";
|
||||
"elevation_profile_min_elevation" = "Мін. висота";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Макс. висота";
|
||||
"elevation_profile_max_elevation" = "Макс. висота";
|
||||
|
||||
"elevation_profile_difficulty" = "Складність";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "Đi xuống";
|
||||
|
||||
"elevation_profile_minaltitude" = "Độ cao tối thiểu";
|
||||
"elevation_profile_min_elevation" = "Min. độ cao";
|
||||
|
||||
"elevation_profile_maxaltitude" = "Độ cao tối đa";
|
||||
"elevation_profile_max_elevation" = "Max. độ cao";
|
||||
|
||||
"elevation_profile_difficulty" = "Độ khó";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "下坡";
|
||||
|
||||
"elevation_profile_minaltitude" = "最小高度";
|
||||
"elevation_profile_min_elevation" = "最低高度";
|
||||
|
||||
"elevation_profile_maxaltitude" = "最大高度";
|
||||
"elevation_profile_max_elevation" = "最高高度";
|
||||
|
||||
"elevation_profile_difficulty" = "难度";
|
||||
|
||||
|
|
|
@ -1228,9 +1228,9 @@
|
|||
|
||||
"elevation_profile_descent" = "下坡";
|
||||
|
||||
"elevation_profile_minaltitude" = "最小高度";
|
||||
"elevation_profile_min_elevation" = "最低高度";
|
||||
|
||||
"elevation_profile_maxaltitude" = "最大高度";
|
||||
"elevation_profile_max_elevation" = "最高高度";
|
||||
|
||||
"elevation_profile_difficulty" = "難度";
|
||||
|
||||
|
|
|
@ -475,10 +475,25 @@
|
|||
ED1080A72B791CFE0023F27E /* SocialMediaCollectionViewHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1080A62B791CFE0023F27E /* SocialMediaCollectionViewHeader.swift */; };
|
||||
ED1263AB2B6F99F900AD99F3 /* UIView+AddSeparator.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1263AA2B6F99F900AD99F3 /* UIView+AddSeparator.swift */; };
|
||||
ED1ADA332BC6B1B40029209F /* CarPlayServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1ADA322BC6B1B40029209F /* CarPlayServiceTests.swift */; };
|
||||
ED2D74382D14337500660FBF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ED2D74342D14337500660FBF /* Assets.xcassets */; };
|
||||
ED2D743A2D14337500660FBF /* AppLogo.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D742C2D14337500660FBF /* AppLogo.swift */; };
|
||||
ED2D743B2D14337500660FBF /* LiveActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D742D2D14337500660FBF /* LiveActivityManager.swift */; };
|
||||
ED2D743C2D14337500660FBF /* StatisticDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D742E2D14337500660FBF /* StatisticDetailView.swift */; };
|
||||
ED2D743D2D14337500660FBF /* StatisticValueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D742F2D14337500660FBF /* StatisticValueView.swift */; };
|
||||
ED2D743E2D14337500660FBF /* TrackRecordingLiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D74302D14337500660FBF /* TrackRecordingLiveActivityAttributes.swift */; };
|
||||
ED2D743F2D14337500660FBF /* TrackRecordingLiveActivityConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D74312D14337500660FBF /* TrackRecordingLiveActivityConfiguration.swift */; };
|
||||
ED2D74402D14337500660FBF /* TrackRecordingLiveActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D74322D14337500660FBF /* TrackRecordingLiveActivityView.swift */; };
|
||||
ED2D74412D14337500660FBF /* OMapsWidgetExtensionBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D74362D14337500660FBF /* OMapsWidgetExtensionBundle.swift */; };
|
||||
ED2D745E2D1433DE00660FBF /* TrackRecordingActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D745D2D1433DE00660FBF /* TrackRecordingActivityManager.swift */; };
|
||||
ED2D74652D14357F00660FBF /* TrackRecordingLiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D74302D14337500660FBF /* TrackRecordingLiveActivityAttributes.swift */; };
|
||||
ED2D74662D1435A600660FBF /* LiveActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D742D2D14337500660FBF /* LiveActivityManager.swift */; };
|
||||
ED2E328E2D10500900807A08 /* TrackRecordingButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED46DD922D06F804007CACD6 /* TrackRecordingButtonArea.swift */; };
|
||||
ED2E32912D10501700807A08 /* TrackRecordingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED49D76F2CF0E3A8004AF27E /* TrackRecordingViewController.swift */; };
|
||||
ED3EAC202B03C88100220A4A /* BottomTabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */; };
|
||||
ED43B8BD2C12063500D07BAA /* DocumentPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED43B8BC2C12063500D07BAA /* DocumentPicker.swift */; };
|
||||
ED46DDCE2D098A0B007CACD6 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED46DDCD2D098A0B007CACD6 /* WidgetKit.framework */; };
|
||||
ED46DDD02D098A0B007CACD6 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED46DDCF2D098A0B007CACD6 /* SwiftUI.framework */; };
|
||||
ED46DDE12D098A0C007CACD6 /* OMapsWidgetExtensionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = ED46DDCC2D098A0B007CACD6 /* OMapsWidgetExtensionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
ED4DC7772CAEDECC0029B338 /* ProductsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4DC7752CAEDECC0029B338 /* ProductsViewModel.swift */; };
|
||||
ED4DC7782CAEDECC0029B338 /* ProductButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4DC7732CAEDECC0029B338 /* ProductButton.swift */; };
|
||||
ED4DC7792CAEDECC0029B338 /* ProductsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED4DC7742CAEDECC0029B338 /* ProductsViewController.swift */; };
|
||||
|
@ -694,6 +709,13 @@
|
|||
remoteGlobalIDString = 6741A93D1BF340DE002C974C;
|
||||
remoteInfo = OMaps;
|
||||
};
|
||||
ED46DDDF2D098A0C007CACD6 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = ED46DDCB2D098A0B007CACD6;
|
||||
remoteInfo = OMapsWidgetExtensionExtension;
|
||||
};
|
||||
FA456C4626BDCC8E00B83C20 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = FA456C4026BDCC8E00B83C20 /* shaders.xcodeproj */;
|
||||
|
@ -738,6 +760,17 @@
|
|||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
ED46DDE22D098A0C007CACD6 /* Embed Foundation Extensions */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
ED46DDE12D098A0C007CACD6 /* OMapsWidgetExtensionExtension.appex in Embed Foundation Extensions */,
|
||||
);
|
||||
name = "Embed Foundation Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
FA456C4E26BDCCC300B83C20 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1406,9 +1439,23 @@
|
|||
ED1080A62B791CFE0023F27E /* SocialMediaCollectionViewHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialMediaCollectionViewHeader.swift; sourceTree = "<group>"; };
|
||||
ED1263AA2B6F99F900AD99F3 /* UIView+AddSeparator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+AddSeparator.swift"; sourceTree = "<group>"; };
|
||||
ED1ADA322BC6B1B40029209F /* CarPlayServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarPlayServiceTests.swift; sourceTree = "<group>"; };
|
||||
ED2D742C2D14337500660FBF /* AppLogo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLogo.swift; sourceTree = "<group>"; };
|
||||
ED2D742D2D14337500660FBF /* LiveActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityManager.swift; sourceTree = "<group>"; };
|
||||
ED2D742E2D14337500660FBF /* StatisticDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatisticDetailView.swift; sourceTree = "<group>"; };
|
||||
ED2D742F2D14337500660FBF /* StatisticValueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatisticValueView.swift; sourceTree = "<group>"; };
|
||||
ED2D74302D14337500660FBF /* TrackRecordingLiveActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingLiveActivityAttributes.swift; sourceTree = "<group>"; };
|
||||
ED2D74312D14337500660FBF /* TrackRecordingLiveActivityConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingLiveActivityConfiguration.swift; sourceTree = "<group>"; };
|
||||
ED2D74322D14337500660FBF /* TrackRecordingLiveActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingLiveActivityView.swift; sourceTree = "<group>"; };
|
||||
ED2D74342D14337500660FBF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
ED2D74352D14337500660FBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
ED2D74362D14337500660FBF /* OMapsWidgetExtensionBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OMapsWidgetExtensionBundle.swift; sourceTree = "<group>"; };
|
||||
ED2D745D2D1433DE00660FBF /* TrackRecordingActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingActivityManager.swift; sourceTree = "<group>"; };
|
||||
ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarButton.swift; sourceTree = "<group>"; };
|
||||
ED43B8BC2C12063500D07BAA /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = "<group>"; };
|
||||
ED46DD922D06F804007CACD6 /* TrackRecordingButtonArea.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingButtonArea.swift; sourceTree = "<group>"; };
|
||||
ED46DDCC2D098A0B007CACD6 /* OMapsWidgetExtensionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OMapsWidgetExtensionExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
ED46DDCD2D098A0B007CACD6 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
|
||||
ED46DDCF2D098A0B007CACD6 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
|
||||
ED48BBB817C2B1E2003E7E92 /* CircleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleView.h; sourceTree = "<group>"; };
|
||||
ED48BBB917C2B1E2003E7E92 /* CircleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CircleView.m; sourceTree = "<group>"; };
|
||||
ED49D76F2CF0E3A8004AF27E /* TrackRecordingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingViewController.swift; sourceTree = "<group>"; };
|
||||
|
@ -1823,6 +1870,15 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
ED46DDC92D098A0B007CACD6 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ED46DDD02D098A0B007CACD6 /* SwiftUI.framework in Frameworks */,
|
||||
ED46DDCE2D098A0B007CACD6 /* WidgetKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
|
@ -1864,6 +1920,7 @@
|
|||
children = (
|
||||
6741AA5D1BF340DE002C974C /* Organic Maps (Debug).app */,
|
||||
ED097E762BB80C320006ED01 /* OMapsTests.xctest */,
|
||||
ED46DDCC2D098A0B007CACD6 /* OMapsWidgetExtensionExtension.appex */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1890,6 +1947,7 @@
|
|||
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||
F6E2FBFB1E097B9F0083EBEC /* UI */,
|
||||
ED1ADA312BC6B19E0029209F /* Tests */,
|
||||
ED2D74372D14337500660FBF /* OMapsWidgetExtension */,
|
||||
);
|
||||
indentWidth = 2;
|
||||
name = Maps;
|
||||
|
@ -1958,6 +2016,8 @@
|
|||
FA853BD026BC3B8A0026D455 /* libsuccinct.a */,
|
||||
FA853BA626BC3ACE0026D455 /* CoreApi.framework */,
|
||||
FA14E683276014C10066E453 /* libz.1.tbd */,
|
||||
ED46DDCD2D098A0B007CACD6 /* WidgetKit.framework */,
|
||||
ED46DDCF2D098A0B007CACD6 /* SwiftUI.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
|
@ -3109,6 +3169,7 @@
|
|||
ED0C54942C6E14CB00253A5F /* TrackRecorder */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ED2D745D2D1433DE00660FBF /* TrackRecordingActivityManager.swift */,
|
||||
ED0C54972C6E14E800253A5F /* TrackRecordingManager.swift */,
|
||||
);
|
||||
path = TrackRecorder;
|
||||
|
@ -3124,6 +3185,31 @@
|
|||
path = Tests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ED2D74332D14337500660FBF /* LiveActivity */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ED2D742C2D14337500660FBF /* AppLogo.swift */,
|
||||
ED2D742D2D14337500660FBF /* LiveActivityManager.swift */,
|
||||
ED2D742E2D14337500660FBF /* StatisticDetailView.swift */,
|
||||
ED2D742F2D14337500660FBF /* StatisticValueView.swift */,
|
||||
ED2D74302D14337500660FBF /* TrackRecordingLiveActivityAttributes.swift */,
|
||||
ED2D74312D14337500660FBF /* TrackRecordingLiveActivityConfiguration.swift */,
|
||||
ED2D74322D14337500660FBF /* TrackRecordingLiveActivityView.swift */,
|
||||
);
|
||||
path = LiveActivity;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ED2D74372D14337500660FBF /* OMapsWidgetExtension */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
ED2D74332D14337500660FBF /* LiveActivity */,
|
||||
ED2D74342D14337500660FBF /* Assets.xcassets */,
|
||||
ED2D74352D14337500660FBF /* Info.plist */,
|
||||
ED2D74362D14337500660FBF /* OMapsWidgetExtensionBundle.swift */,
|
||||
);
|
||||
path = OMapsWidgetExtension;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
ED43B8B92C12061600D07BAA /* DocumentPicker */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -3972,11 +4058,13 @@
|
|||
6741A9A01BF340DE002C974C /* Sources */,
|
||||
6741AA311BF340DE002C974C /* Frameworks */,
|
||||
4740184523F5BDE900A93C81 /* Embed Frameworks */,
|
||||
ED46DDE22D098A0C007CACD6 /* Embed Foundation Extensions */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
FA456C4D26BDCC9400B83C20 /* PBXTargetDependency */,
|
||||
ED46DDE02D098A0C007CACD6 /* PBXTargetDependency */,
|
||||
);
|
||||
name = OMaps;
|
||||
productName = Maps;
|
||||
|
@ -4001,6 +4089,25 @@
|
|||
productReference = ED097E762BB80C320006ED01 /* OMapsTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
ED46DDCB2D098A0B007CACD6 /* OMapsWidgetExtensionExtension */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = ED46DDE62D098A0C007CACD6 /* Build configuration list for PBXNativeTarget "OMapsWidgetExtensionExtension" */;
|
||||
buildPhases = (
|
||||
ED46DDC82D098A0B007CACD6 /* Sources */,
|
||||
ED46DDC92D098A0B007CACD6 /* Frameworks */,
|
||||
ED46DDCA2D098A0B007CACD6 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = OMapsWidgetExtensionExtension;
|
||||
packageProductDependencies = (
|
||||
);
|
||||
productName = OMapsWidgetExtensionExtension;
|
||||
productReference = ED46DDCC2D098A0B007CACD6 /* OMapsWidgetExtensionExtension.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
|
@ -4023,6 +4130,9 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
ED46DDCB2D098A0B007CACD6 = {
|
||||
CreatedOnToolsVersion = 16.0;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Maps" */;
|
||||
|
@ -4089,6 +4199,7 @@
|
|||
targets = (
|
||||
6741A93D1BF340DE002C974C /* OMaps */,
|
||||
ED097E752BB80C320006ED01 /* OMapsTests */,
|
||||
ED46DDCB2D098A0B007CACD6 /* OMapsWidgetExtensionExtension */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
@ -4294,6 +4405,14 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
ED46DDCA2D098A0B007CACD6 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ED2D74382D14337500660FBF /* Assets.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
|
@ -4374,6 +4493,7 @@
|
|||
9989273C2449E60200260CE2 /* BottomMenuInteractor.swift in Sources */,
|
||||
47DF72B922520CE20004AB10 /* MWMRoutingOptions.mm in Sources */,
|
||||
999FC12023ABA9AD00B0E6F9 /* SearchStyleSheet.swift in Sources */,
|
||||
ED2D745E2D1433DE00660FBF /* TrackRecordingActivityManager.swift in Sources */,
|
||||
3D15ACEE2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm in Sources */,
|
||||
9977E6A32480F9BF0073780C /* BottomMenuLayerButtonRenderer.swift in Sources */,
|
||||
3454D7D11E07F045004AF2AD /* UIImage+RGBAData.m in Sources */,
|
||||
|
@ -4585,6 +4705,7 @@
|
|||
F6E2FF3C1E097BA00083EBEC /* MWMSearchTableView.m in Sources */,
|
||||
F6E2FF661E097BA00083EBEC /* MWMTTSSettingsViewController.mm in Sources */,
|
||||
3454D7C21E07F045004AF2AD /* NSString+Categories.m in Sources */,
|
||||
ED2D74662D1435A600660FBF /* LiveActivityManager.swift in Sources */,
|
||||
34E7761F1F14DB48003040B3 /* PlacePageArea.swift in Sources */,
|
||||
ED79A5D82BDF8D6100952D1F /* LocalDirectoryMonitor.swift in Sources */,
|
||||
EDC4E34B2C5D1BEF009286A2 /* RecentlyDeletedCategoriesViewController.swift in Sources */,
|
||||
|
@ -4701,6 +4822,7 @@
|
|||
993DF10823F6BDB100AC231A /* IColors.swift in Sources */,
|
||||
4707E4B12372FE860017DF6E /* PlacePageViewController.swift in Sources */,
|
||||
34AB66441FC5AA330078E451 /* RouteManagerViewModelProtocol.swift in Sources */,
|
||||
ED2D74652D14357F00660FBF /* TrackRecordingLiveActivityAttributes.swift in Sources */,
|
||||
4701A93D243A917900B87683 /* TouchTransparentView.swift in Sources */,
|
||||
991FCA2423B11E61009AD684 /* BookmarksStyleSheet.swift in Sources */,
|
||||
993DF12823F6BDB100AC231A /* IStyleSheet.swift in Sources */,
|
||||
|
@ -4783,6 +4905,21 @@
|
|||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
ED46DDC82D098A0B007CACD6 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ED2D743A2D14337500660FBF /* AppLogo.swift in Sources */,
|
||||
ED2D743B2D14337500660FBF /* LiveActivityManager.swift in Sources */,
|
||||
ED2D743C2D14337500660FBF /* StatisticDetailView.swift in Sources */,
|
||||
ED2D743D2D14337500660FBF /* StatisticValueView.swift in Sources */,
|
||||
ED2D743E2D14337500660FBF /* TrackRecordingLiveActivityAttributes.swift in Sources */,
|
||||
ED2D743F2D14337500660FBF /* TrackRecordingLiveActivityConfiguration.swift in Sources */,
|
||||
ED2D74402D14337500660FBF /* TrackRecordingLiveActivityView.swift in Sources */,
|
||||
ED2D74412D14337500660FBF /* OMapsWidgetExtensionBundle.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
|
@ -4791,6 +4928,11 @@
|
|||
target = 6741A93D1BF340DE002C974C /* OMaps */;
|
||||
targetProxy = ED097E7A2BB80C320006ED01 /* PBXContainerItemProxy */;
|
||||
};
|
||||
ED46DDE02D098A0C007CACD6 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = ED46DDCB2D098A0B007CACD6 /* OMapsWidgetExtensionExtension */;
|
||||
targetProxy = ED46DDDF2D098A0C007CACD6 /* PBXContainerItemProxy */;
|
||||
};
|
||||
FA456C4D26BDCC9400B83C20 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = shaders_metal;
|
||||
|
@ -5027,6 +5169,62 @@
|
|||
};
|
||||
name = Release;
|
||||
};
|
||||
ED46DDE32D098A0C007CACD6 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = 9Z6432XD7L;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = OMapsWidgetExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = OMapsWidgetExtension;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 Organic Maps. All rights reserved.";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = app.organicmaps.debug.OMapsWidgetExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
ED46DDE42D098A0C007CACD6 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = 9Z6432XD7L;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = OMapsWidgetExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = OMapsWidgetExtension;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2024 Organic Maps. All rights reserved.";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = app.organicmaps.debug.OMapsWidgetExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
FAAB411B149BA84700C245B1 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 347526FA1DC0B00F00918CF5 /* common-debug.xcconfig */;
|
||||
|
@ -5135,6 +5333,15 @@
|
|||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
ED46DDE62D098A0C007CACD6 /* Build configuration list for PBXNativeTarget "OMapsWidgetExtensionExtension" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
ED46DDE32D098A0C007CACD6 /* Debug */,
|
||||
ED46DDE42D098A0C007CACD6 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
|
|
|
@ -282,5 +282,7 @@
|
|||
<string>OrganicMapsDEBUG</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>NSSupportsLiveActivities</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "tinted"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue