Press "Enter" to skip to content

Hogyan készítsünk egy képernyőképet 2GIS-re

Hogyan indítottunk el 2GIS-t Carplay alatt, és még mindig gyengítjük

Hé! A nevem Vanya, egy mobilalkalmazást írok az iOS alatt. Ma lesz egy történet arról, hogy a navigátorunk hogyan jelent meg a Carplay-ban. Megmondom, hogy milyen dokumentációval és befejezetlen eszközökkel rendelkezünk, létrehoztunk egy munkaterőt, és elhelyeztük az AppStore-hez.

Pár szavak a Carplay-ról

Először is, egy kicsit egyezés a carplay egyes aspektusainak megértéséhez, valamint az okok miatt, amelyek miatt bizonyos döntéseket elfogadtunk.

A CARPLAY NEM OS a másik operációs rendszeren belül, mivel nagyon sok cikkben írnak róla. Ha durva, akkor a Carplay egy protokoll, amely a fejeszköz külső képernyőjének megjelenítéséhez dolgozik; hangja az autó hangszórókból; Érintse meg a képernyőképeket, az érintőpadokat, az alátéteket és más bemeneti eszközöket.

Ez az, hogy a teljes végrehajtható kód közvetlenül a fő alkalmazásban van (még egy külön kiterjesztés sem!) Ez nagyon cool: Ahhoz, hogy az új funkciókat, akkor nem kell frissíteni a rádió, vagy akár egy autó, akkor csak meg kell frissítés iOS.

A WWDC Keynote-on bemutattuk a Carplay alatti navigációs alkalmazások létrehozására, ami nagyon elégedett volt. Közvetlenül azután, hogy a bemutató, akkor kért, hogy megoldja a fejlesztés alatt CarPlay. A kérésben meg kellett mutatni, hogy alkalmazásunk képes navigálni.

Miközben az Apple-től vártunk, előadás volt az előadás, amelyben a minta-kérelem példáján szerepeltünk a habárral való együttműködésről. Az előadások nem beszéltek a buktatókról és a bonyolultokról, amikor a Carplay-szel dolgozott, de megemlítették, hogy a Carplay Magnetoolhoz való csatlakozás után az alkalmazás a háttér módban működik.

Az első bot a kerekeken

Alkalmazások a háttérben csalódott minket. Két oka volt:

  1. Nem dolgozunk a háttérben. Miután technikai okokból és energiatakarékosságra hagyta ezt a korlátozást.
  2. Kártyánk OpenGL-re van írva (igen, elavult, igen, nem fém, mindannyian tudjuk ezt), és az OpenGL a háttérállapotban nem működik. A legjobb esetben fekete megjelenést kapsz, és a legrosszabb összeomlik.

A háttérben a háttérben még mindig kezelheted, de egy térképen feltétlenül valamit kell megoldani. Ezután az ötlet azért jött, hogy a szabványos MKMAPVIEW. Amíg elkezdtünk dobni ránk kövekkel az elképzeléshez a szokásos Apple Térképek használatával, megmagyarázom: Mkmapview-ot fogunk használni, de nem az Apple térképeket.

Az a tény, hogy az MKMAPVIEW képes letölteni a harmadik féltől származó csempét. A csempe speciális téglalap alakú edények. Épp most kaptunk egy kiszolgálónak, aki tudja, hogyan kell csempét adni. A github-on van egy kód végrehajtása.

Válasz az Apple-től

Válaszunk volt az Apple-től, amelyben a fejlesztési engedély mellett a “Kedvencek” dokumentációt, a vidéki mintaalkalmazási kódot is megkaptuk (a WWDC előadásokon), és a legfontosabb, hogy a magánképesség . Ez a kulcs előírt egy jogosultságok-fájlt a YES értéket, hogy a rendszer úgy értelmezi, hogy tudja kezelni az eseményeket a CarPlay amikor elindítja az alkalmazást.

Anélkül, hogy várta a sprint-t a történetek fejlesztésére, felmászottam az xcode béta letöltésére. A 2GIS összegyűjtésének első kísérlete hiba volt. De a Courtyroads mintaalkalmazási projekt sikerült összegyűjteni a szimulátor alatt.

A Carplay Simulator ablak minden egyes megnyitása előtt az utóbbi az ilyen ablakon keresztül testreszabott:

Ehhez be kellett regisztrálni a terminálvonalban:

Valamilyen oknál fogva nem működött – szinte a legkisebb szimulátorral kellett futtatnom a × pörgetésekkel és a Sagale × 2 felbontással. Jelenleg ez a beállítás működik, és tökéletesen segít.

Miután létrehozta a minta-projektet és fegyveres dokumentációval, elkezdtem megérteni, mi.
Az első dolog, amit megértettem: A CARPLAY navigációs alkalmazásai az alapnézet rétegből és sablonokból állnak.

Alapnézet a térképed. Ezen a rétegen csak egy térkép, nincs más nézet és ellenőrzés.

A sablonok szinte nem egyéni kötelező felszerelés az UI elemek megjelenítéséhez, manőverek, mindenféle listát és így tovább.

Beta fejlesztése

Forduljunk az írási kódhoz. Az első dolog, hogy egy pár kötelező CpapplicationDelegate módszert alkalmazzon az ApplicationDelegate fájlban.

Nézzük meg az aláírást:

Az uiaplication minden tiszta.
CPWINDOW – UIWINDOW HEIR, ablak a magnó külső megjelenítéséhez.
Cpinterfacecontroller – valami, mint az UinavigationController’a analógja, csak a Haborkból.

Most menjünk közvetlenül a módszer végrehajtásához.

A DIDCONNECT-ben olyan kódot kell írnia, amelyhez hasonlóan a DidFinishlaching-ben használtunk. A CarmapviewController egy alapnézet (a vezérlő valójában, de oké), mint a dokumentáció.

Itt van a kép a végén, amit kaptam:

Valahol ebben az időben jött hozzám, hogy az új Xcode új építési rendszerben engedélyezve alapértelmezés szerint, és valószínűleg ennek következtében a 2gis nem fog.

Megnyitottam az XCode-t, a Legacy-t (vagy meglehetősen stabil, hívjunk a saját neveddel) építeni a rendszert, és az elméletem megerősítette: 2gis összegyűlt.

Ugyanazon kapacitáskulcs fordítása, 2GIS-t indítottam a Carplay alatt, és nem láttam a naplókat az alkalmazásról a háttér módra. Ez egyre inkomensible lett, mert az Apple mérnökei a jelenetről szóltak a háttérképről, de másrészt megígértük, hogy tartalomnézet az Uiailertview-ben, és ennek eredményeképpen az Uiailertview elavult.

Úgy dönt, hogy így kell, nem zavartam az MKMAPVIEW-vel. Elfosztaná minket offline állapotban, és kénytelen újraírni az útvonalak rajzát.

Egy kártya problémája

Nem volt ideje fellebbezni a híreket, hogy a Carplay-ban lesz a mi kártyánk, mint a következő probléma, amit felállítottam: Műszaki jellemzők miatt a kártya csak egy.
A probléma gyors megoldása volt, bár nem nagyon elegáns.

Általában a 2GIS használatának időpontjában a Carplay-on a telefon blokkolva van, és valahol a polcon fekszik. Majd a térkép ezen a ponton a telefonon nem túl szükséges (természetesen nem akadályozza meg a keresést). Ezért úgy döntöttünk, amikor csatlakoztatja a telefont a CarPlay hogy a térképen a fő alkalmazás, és megjeleníti azt a CARPLAY Magnetola képernyő. És ha le van kapcsolva, térjen vissza az alkalmazáshoz a telefonon.

Igen, a megoldás annyira, de gyors, még mindig működik, és nem kellett néhány más csapatot rúgnia az MVP-nek.

Vezérlők a térképen

Szóval, megkaptuk a kártyánkat a magnittole képernyőn. Most meg kellett volna tenni az első és nyilvánvaló bármilyen kártyát: zoom kontrollok, aktuális hely és térképmozgás.

Kezdjük a zoom és az aktuális helyszínen, mert ezek az ellenőrzések maga a térképen vannak, és ez nem hétköznapi uicontrol. Ahogy fent írtam, csak a térkép az alapnézeten van.

Annak érdekében, hogy ezeket az ellenőrzéseket a kártyára helyezzék, újra kellett mennem a dokumentációba és a mintaalkalmazáshoz. Ott olvastam az első sablonról – CpMaptemplate.

CPMAPTEMPLATE – Átlátszó sablon, hogy megjelenjen néhány irányítást a térképen és a navigációs sáv analógján. Ez így jön létre és kitéve:

Ezután létre kell hoznia ezeket az ellenőrzéseket, és tegye őket a térképre.

De a MapButtons tömb kiderült, hogy vicceket, mert hány elem benne van nem üzembe, majd csak akkor az első három tétel, és megjeleníti őket a képernyőn. Sem a naplót, sem az állításokat nem kapja meg.

Aztán felmászottam, hogy nézzen, hogy egy kártyát mozogjak, és megtalálják a dokumentációban itt:

Furcsa, gondoltam, és felmászott, hogy nézzük meg, hogyan történt a mintában alkalmazott vidéken. A válasz az interfészen keresztül történik:

Nem túl kényelmes, de más módon, a dokumentáció nem hazudik, igaz?

Mivel a térképen végződő irányításának helye, szükség volt arra, hogy egy gombot át kell vinni a térképet a “Drag” módba a navigációs bárban.

De LEADINGNAVIGATIONBARBUTTONS tömbök és TrailingNavigationBarButtons szintén nem voltak anélkül vicc: hány elem sem piihai, akkor csak az első kettőt. A napló és a kijelentések hibái nélkül is.

És aktiválja és deaktiválja a húzás és a csepp módot, meg kell írnia:

Útvonalak építése és megjelenítése a térképen

Ezután gondoskodtam arról, hogy a már meglévő API-t fenntartsák az útvonalak építésére.

Csak a demo és megértés, hogy mit és hogyan kell csinálni, úgy döntöttem, hogy két pontot veszek, és épít egy útvonalat közöttük. A lényeg volt a felhasználó helye, és a B pont – a Novoszibirszk fő irodánk.

Kód

A képernyőn ellenőriztük az útvonal leírását:

Navigációs mód

Az útvonalak jóak, de a navigátor fő chipje még navigációban van. Tehát megjelenik, meg kell írnia a következőket:

CPNavigationSession – egy osztály, amely meg tudja jeleníteni a felhasználói felület néhány szükséges elemeket csak navigációs üzemmódban.

A manőver megjelenítéséhez szüksége van:

Ezt követően a magnitoles képernyőn megkapjuk ezt:

A MÓZÓ METAGE frissítéséhez szüksége van:

Csak működik!

Amikor a Navigátor fő funkciója készen állt, úgy döntöttem, hogy megmutatom ezt a bejárót a belső bemutatón. A bemutató sikerül: az ötlet, hogy az ötlet befejezze, tesztelje és elindítsa a navigátort a lehető leghamarabb.

Először is, rendeltünk egy igazi fejlécet Carplay Támogatással. És itt, ahogy azt mondják, a hő elment.

Provision profilok

Új kapacitáskulcs hozzáadása miatt túlterhelte a profilokat. A normál fejlődésben nem gondolunk rá, mert az xcode mindent megtesz. De nem egy privát kulcs esetében.

Ezenkívül megtörte a CI-t, mivel az alkalmazási verziók helyi elosztásáért az Enterprise fiókot használjuk, amelyben nem kérünk engedélyt a Carplay alatt történő alkalmazás kifejlesztésére. De ez egy teljesen más történet

Hibakeresés

A CARPLAY-hez Bluetooth vagy villámlással csatlakozhat. A gyakorlat azt mutatja, hogy a második út sokkal népszerűbb. A Bluetooth-ban a rádiószalag felvevője nem tudta, hogyan kell használni a Wi-Fi hibakeresést a fejlesztés során. Ha megpróbálta a projekteken nehezebb, mint Hello World, akkor tudod, mi a pokol.

És azok számára, akik nem próbálták meg, mondván:

A vezetékre összegyűjtöttem a vezetéket a telefonra, és csak akkor csatlakoztatva a telefont Carplay-hez, Wi-Fi segítségével, öntötte a telefont, és néhány percig indított.
Az alkalmazás másolása a telefonra körülbelül 3 perc volt, az alkalmazás kezdete körülbelül egy perc, csak akkor, ha a megszakítás megkezdése után a töréspontok csak másodpercek voltak

És akkor lett nagyon érdekes, hogy miért az Apple nem tesz semmilyen devkit (alma-út, csak működik, és hogy ez az egész). Anélkül, hogy összegyűjti, hogy a tesztfülke nem volt nagyon kényelmes. Eddig néhány hét múlva valami leesik – meg kell emlékezni a képekre, hogy hol van. Jó, hogy az adminisztrátor az állítás összeszerelésénél azt mondta, hogy mit és miért.

A legjobb keretet, amit valaha tettünk

Végül, amikor minden összegyűlt az igazi eszközön, világossá vált, hogy a Fitch “2Gis a Carplay alatt”. Itt az ideje, hogy a szépségre.

Problémák a VIAPORT-val

Szükséges volt konfigurálni a kártya nézetablakát, hogy felhívhassa az útvonalakat a területen, szükségtelen kontrollok nélkül, és nem csak középen. Röviden, hogy rosszul néz ki:

És aztán:

Azt vártam, hogy kapok néhány layoutguide a jelenlegi látható területen. Hogy figyelembe vegye a navigációs sávot, és nézze meg az útvonalat, és ellenőrzi a térképen. Tény, hogy nincs semmi. Még mindig érthetetlen Hogyan kell konfigurálni a nézetablakot, így van egy keménykód a kódunkban:

Nem csak két pont között képzés

Az első kiadásban úgy döntöttünk, hogy a CpgridTemplate-en keresztül készítettük a rubridatort:

Kedvencek és otthoni / munka CplistTemplate segítségével.

És billentyűzetkeresés a CPSearchTemplate segítségével:

Nem jelenítem meg a sablonok kódját, mivel egyszerű, és a dokumentáció jól meg van írva róla (legalább valami).

Azonban érdemes megemlíteni, hogy mely problémákat fedeztek fel velük.

A Cpinterfacectroller navigálhat, mint az Uikit. T. E.

De ha megpróbál futtatni, például CPalerttemplate, akkor kap egy állítja a naplókat, amelyek CPalerttemplate csak modális bemutatásra.

Nem világos, hogy miért az Apple nem elrejteni a logika transishes a motorháztető alatt, anélkül, hogy a felület a típus:

Azt is megszakította a lehetőséget, hogy használja a CPTemplate örököseit, mintha az Uikit vezérlők.

Ha megpróbálsz például, tedd a sablonok stackjét az örökösed, megkapod ezt:

Tesztelés és hibák

A tesztelés az ARTEMENKO-A-A-ban foglalkozott. Az egyik első hiba, amit talált, még mindig nem tudunk javítani.

Az a tény, hogy amikor kihúzza a telefont CarPlay-magnetol, Watchdog szórványosan hányingere – magyarázata nélkül okai. Még a syslogs is megnyílt, semmi sem világos. Tehát ha van egy ötlet, hogyan kell javítani vagy megérteni az okot, akkor Velkov megjegyzésekben.

A következő hiba ugyanabban a helyen volt, de különleges viselkedéssel. Azt írtam, hogy a CpapplicationDelegateDelegate diddisconnect módszerét a telefon leválasztásának időpontjában hívják. És ebben a módszerben visszaadjuk a térképet a MAGNITOL képernyőn a fő alkalmazáshoz. Képzelje el, hogy hány problémát okoznánk, ha ezt a módszert nem hívták legalább ötből.

Nyilvánvalóvá vált, hogy ez az iOS problémája, és nem kifejezetten az alkalmazásunk, mivel az egész rendszer úgy gondolta, hogy a Carplay-hez kapcsolódik.

Én is rögzítem, mint a radar (mint minden más hiba). Megkértem, hogy dobjak ki naplókat egy ilyen profiljal, de nem tudtam válaszolni egy ideig, így zárt a radarra.

Amint az Apple nem tervezett semmit tervezett, a probléma el kellett mennie egyedül, mivel gyakran reprodukálták.

És akkor eszembe jutott, hogy az oroszlánrészét a kapcsolatot CarPlay megy keresztül Lightning. Ez azt jelenti, hogy a telefon a kapcsolat időpontjában kerül felszámolásra, és a leállítás időpontjában leállítja a töltést. És ha igen, akkor iratkozz fel az akkumulátor állapotát és megtudja, pontosan, amikor a telefon megállt a töltés és kihúzta CarPlay.

A rendszer csendes, de nem volt választásunk. Elmentünk így, és minden dolgozott!

Szerencsére ez a mankó a kódból régóta eltávolították: az Apple fejlesztők mindent megjavítottak az iOS egyik kiadásában.

Két rendellenesség története

Első regect a metadatokhoz kapcsolódott. A Reault szövege azt mondta, hogy a leírásban (nem kiadja a megjegyzéseket) nem mondja, hogy támogatjuk a Carplay-t. Amint azt kitalálhatod, sem a felülvizsgálat útmutatója, ugyanazon a Google Térkép nem volt ilyen. Nem vitatkoztunk (mert általában hosszabb, mint a metadat szerkesztése), a leírásban leírta a sort a leírásban, és elkezdett várni egy új ordítást.

Második reland a városlista miatt történt. A 2GIS nagyon hűvös funkcióval rendelkezik – Teljesen offline állapotú. Ez a funkció a lábunkat megrázta.

Ha az alkalmazást a Carplay-re telepített város nélkül csatlakoztatja, nem jelenítjük meg a térképet, mert nincs mit mutatni. Mert elkaptunk. A megoldás egyszerű volt: egy figyelmeztető gombok nélkül, amelyben meg van írva, hogy le kell töltenie a város.

Mit tudsz beszélni

Mozgó térkép gesztusok

Körülbelül ugyanabban az időben, a Navigator alatt CarPlay a Google Maps kijött – és ott is volt lehetséges, hogy mozgassa a térképet gesztusok a képernyőn. Privát API, gondoltam, nyilvánvaló! A Google-i srácok csak a szomszédos épületből jöttek, és azt mondták, hogy szükségük van rá. Végtére is, a dokumentáció azt mondja:

Úgy döntöttem azonban, hogy megbizonyosodtam, és eljutok a Google-hoz, bár szinte értelmetlen volt, mert nem volt technikai cikkek a Carplay navigációs alkalmazásokról. Ugyanakkor sikerült találnom valami hasznosnak és hirtelen, az Apple honlapján.

Gaidlanakhban találtam egy videót, amely azt mondja, hogy a dokumentáció brazenly hazudik. A videóban látható, hogy a kártya továbbra is húzható gesztusokkal. Rájöttem, hogy nem értettem semmit, és az egyetlen dolog, ami nekem maradt, hogy megnyitja a haborkot és felülvizsgálja mindent .H fájlok.

És a csodáról! Én meg a CPMAPTemplateElegate delegáltja CPMaptemplate, ahol van 3 módszerek, amelyek látszólag kiabálni arról, hogy ha végrehajtja azokat, akkor kap az irányítást a gesztus kártya.

3 módszer

/ * Úgynevezett, amikor egy serpenyő gesztus kezdődik. Előfordulhat, hogy nem hívható meg néhány carplay rendszerhez.
/
Opcionális nyilvános FUNC MAPTEMPLATEDIDBEGINPANTURE (_ MAPTEMPLATE: CPMAPTEMPLATE)

/ * Ha egy serpenyő gesztus megváltozik. Előfordulhat, hogy nem hívható meg néhány carplay rendszerhez.
/
Választható nyilvános FUNC MAPTEMLATE (_ MAPTEMPLATE: CPMAPTEMPLATE, DIDUPDATEPANTUREWITHTRANSLATION Fordítás: CGPount, Velocity: CGPoint)

/ * Amikor egy serpenyő gesztus véget ér. Előfordulhat, hogy nem hívható meg néhány carplay rendszerhez.
/
Opcionális Public Func MapTemplate (_ maptemplate: cpmaptemplate, didendpangsturewithrelocity sebesség: CGPount
)

Végrehajtottam őket, és elindítottam az alkalmazást a szimulátoron – semmi sem működött. Nincs idővel, hogy ideges, rájöttem, hogy a szimulátor ugyanolyan minőségű lehet, mint a dokumentáció, és összegyűjti az eszközön. Minden elkezdődött, a boldogság nem volt a határ!

Vicces tény: Carplay-magnetolnak szüksége van egy negyedre a képernyőre, hogy megértse, hogy a serpenyő gesztus kezdődött. Megjegyzem, hogy uipangsturnerecognert csak 10 pontra van szüksége.

Egyenlőség UI különböző rádióban

A fellebbezés támogatta: A keresési felhasználó csak egy SAGEST-t kap, bár lehet, hogy több lehet. Furcsa, gondoltam, mert az összes képernyő csak egy sor van elhelyezve. Szükséges screenshot:

És nagyon különbözik az UI CPSearchTemplate-tól, amelyet fent megjelentek. És meg kell kidolgozása során figyelembe veendő, bár lehetetlen kideríteni, hogy hány sejt a tableboard lehet az alján.

Irányítási sebességkorlátozás

Megnéztük a statisztikákat, és rájöttünk, hogy a Navigator a Carplay használatát használja, és legalább a navigátor szintjét kell hozni a fő alkalmazásban. Először is úgy döntöttünk, hogy sebességkorlátozást adunk hozzá. Természetesen nem jelentett problémát.

Kérdés száma: Hol helyezhető el?

Újra felfelé .H fájlok a CPWINDOW-ban, találtam egy kíváncsi layoutguideot:
VAR MAPButtonSafeareAlayoutGuide: UilayoutGuide

És kiderült, hogy. Ellenőrzésünk tökéletesen illeszkedik ide:

2. kérdés: Ez általában törvényes?

Az a tény, hogy technikailag az alapnézet. És az alapnézet a dokumentációban nem tartalmazhat semmit, kivéve a kártyát:

De a lektor fogadott minket az AppStore, ami azt jelenti, az ellenőrzések, amelyek kapcsolódnak a navigáció, akkor beágyaz egészet.

Hang Keresés

Jó módon, ezt a funkciót először is meg kellett tenni, de számos olyan feladatot halmoztunk meg, akik zavarják a Carplay hangkeresést. És ez a feladat nem volt olyan egyszerű, mint amilyennek látszott.

Először probléma: animációk. Az a tény, hogy a CPvoicecontrolTemplate-ban nincs lehetőség a szabványos animációk készítésére. A beszédfelismerés és a keresés animációját összegyűjtötte a képeket, és jelezze, hogy mennyit mennek időben.

Úgy néz ki, mintha kitalálnád, nem nagyon, de nem akarja felfújni az alkalmazást.

Probléma második: Tartozékok. A mikrofonhoz és a beszédfelismeréshez való hozzáférés jelzései megjelennek a telefon kijelzőjén. Meg kellett írnom a rádió kijelzőjén, hogy a felhasználónak meg kell vennie a telefont a kezébe, adja meg az engedélyt, és csak akkor használja a Navigátort a rádión. Nagyon kényelmesen!

Purval autók.

Elküldtünk egy képernyőképet, amelyben az egész alkalmazás UI ki van kapcsolva!

És persze az ablakon a kártya maradt, mint mi Zakhardkodili, mert senki sem számított, hogy van egy külön beállítás a jobbkormányos autók. Hogy “ez helyes”, nem találtam meg, de észrevettem, hogy mivel a sebességkorlátozásunk a kártya-vezérlők layoutguidejában rejlik, balra költözött.

Az Ultrafix nem várta magát. Durva volt, de működik.

Nagyon remélem, hogy van egy helyes döntés, és csak nem olvastam.

Mindentem van. Ha hirtelen kijön, hogy a navigátor a carplay alatt legyen, vegye figyelembe, hogy a dokumentáció és a keretrendszer tökéletlen. A platform teljesen új, senki sem tudja semmit, és az Apple részvényei nem sietnek.

Comments are closed, but trackbacks and pingbacks are open.