paint-brush
Nola sortu zure Xcode proiektua Appleko ekosisteman hainbat plataformatarakoarabera@darrylbayliss
165 irakurketak Historia berria

Nola sortu zure Xcode proiektua Appleko ekosisteman hainbat plataformatarako

arabera Darryl Bayliss9m2025/02/12
Read on Terminal Reader

Luzeegia; Irakurri

Ikasi zure Xcode proiektua nola eraiki Apple Ekosistemako hainbat plataformatarako.
featured image - Nola sortu zure Xcode proiektua Appleko ekosisteman hainbat plataformatarako
Darryl Bayliss HackerNoon profile picture
0-item
1-item

2023ko ekainean, Applek Vision Pro iragarri zuenez, entzungailuetan ondo funtziona zezakeen ideia bat izan nuen: zure eguneroko erabilerarekin batera erreproduzitzen diren begiztatutako bideoen bilduma. Hau egin zezakeen aplikazio bat nuen jada, Christmas Chill izenekoa, App Store bat onartzen duen Apple TV-a eskuragarri jarri zenean eraiki nuen zerbait. Jaietako atzeko plano gisa erabil ditzakezun begiztatutako bideoen bilduma eskaintzen du.


Urtero neguan, egun pare bat ematen ditut hura hobetzen, eduki berriak gehitzen eta kode-basea hobetzen. Proiektuan egindako aldaketa handienetako bat 2023ko abenduan gertatu zen, UI UIKit eta Storyboards-etik SwiftUIra migratu zenean.


Beno, gehienbat migratuta. AVPlayer-en babestutako ikuspegi bat behar nuen UIViewRepresentable batean bilduta. UIKit eta SwiftUIren arteko elkarreragingarritasuna eskaintzen duen API bikaina, beharrik baduzu.


Lehenago migratzeko zalantza samarrak izan nituen, Declarative UI eta bere kontzeptuak React eta Jetpack Compose- rekin egindako beste lanetatik ondo ulertzen nituelako. Hori aldatu egin zitzaidan Applek Apple Vision Pro-ren eta SwiftUI-ren laguntzarekin. Christmas Chill nire Apple Dev ezagutza eguneratuta mantentzeko proiektu polita izan da, eta aplikazioa gailu ezberdinetara zabaltzen esperientzia lortzeko gogoa nuen.


2023ko SwiftUI-rako migrazioa Christmas Chill-erako amaitutakoan, 2024an abiatu nintzen Vision Pro-rako laguntza gehitzeko. Jarraian, nola egin nuen eta zer gomendatzen dizut zure aplikazioetarako gauza bera egiten saiatzen ari bazara.

Plataforma berri bat gehitzea

Hasteko, proiektuak Vision Pro helmuga gisa eraikitzeko gai izan behar du; hau egitea harrigarriro erraza da! Xcode barruan, hautatu .xcodeproj fitxategia eta Onartutako Helmugak goitibeherako azpian, egin klik plus botoian.


Onartutako helmugak



Eskuragarri dauden Apple plataforma guztien goitibeherako zerrenda bat agertzen da. Pasa ezazu helmuga gisa gehitzeko nahi duzun plataformaren gainean, kasu honetan, Apple Vision, eta egin klik Apple Vision agertu berri den atalean.


Gehitu Apple Vision Pro Destination



Popup txiki bat agertuko da Xcodek xedean egin behar dituen aldaketen berri emateko. Sakatu Gaitu .


Gaitu Helmugarako laguntza


Ondoren, sortu aplikazioa visionOS Simulator erabiliz. Vision Pro eskura baduzu, hemen zure gailuan instalatzeko argibideak aurki ditzakezu.


Konpilazioan zehar, litekeena da Xcode-k konpiladore-erroreak aurkitzea eta/edo aplikazioa huts egitea. Hori espero da eta pazientzia izateko praktika bat. Une honetatik aurrera, zure proiektuko akatsak konpondu behar dituzu aplikazioa konpilatu eta huts egin arte.


Nire kasuan, 30 minutu inguru behar izan ditu, neurri batean aplikazioa UIKit-tik SwiftUIra migratzeko lan gogorra egiteari esker!

Konpilazio baldintzapeko blokeak

SwiftUI, bere oinarrian, plataforma anitzeko esparrua da, hau da, SwiftUI kodea beste plataforma baterako konpilatuz, itxura aldatuko du. Plataformaren estiloa eta elkarrekintza-metodo ezberdinak kontuan hartuta.


Horrek garapenean aurrerapen azkarrak egiten laguntzen badu ere, baliteke aplikazioa nola agertzen den kontrolatzea eta plataforma bakoitzaren indarguneak aprobetxatzea. Adibide ona Vision Pro-ren Murgiltze gaitasunak dira; SwiftUI-k horretarako API bat eskaintzen du ImmersiveSpace-ren bidez, visionOS-erako soilik eskuragarri dagoen API bat.


Apple TVrako proiektua konpilatzen bitartean API hau erabiltzen saiatu bazara, Xcode-k errore bat emango du API hau erabilgarri ez dagoela jakinarazteko.


Beraz, zein da egoera hori saihesteko irtenbidea? Erantzuna Baldintzazko Konpilazio Blokeak erabiltzeatik dator. Konpilazio blokeak kodearen atalak dira, konpilatzaileak blokearen barruan kodea noiz konpilatu behar duen jakiteko argibideak ematen dituztenak.


Hainbat baldintza onartzen dituzten arren, gure beharretarako erabilgarriena kodea zein plataformatarako konpilatzen den detektatzea da. Kode lerro gutxi batzuekin egin dezakezu:


 var body: some Scene { #if os(tvOS) WindowGroup { HStack { Text("I am running on tvOS!") } } #elseif os(visionOS) ImmersiveSpace(id: "MyImmersiveSpace") { } #endif }


Xcode-k konpilazio baldintzapeko blokeak onartzen dituen ezaugarri polita da argitzea zer kodea konpilatuko den konpilaziorako hautatutako plataformaren arabera. Konpilatuko ez den kodea ere apur bat desagertuko da.


Konpilazio baldintzapeko blokeak

Mendekotasun-injekzioa Eraikitze-faseen bidez

Aurkitu dudan trikimailu erabilgarrienetako bat Konpilatu iturriak eta Kopiatu sorta baliabideak eraikitzeko faseak erabiltzea da mendekotasun-injekzio moduan. Prozesu hauek aplikazioa eraikitzen denean exekutatzen dira eta Xcode Proiektuko Eraikitze faseak fitxan aurki daitezke.


Eraikitzeko faseak


Compile Sources-ek zure iturburu-kodea makina-kodean konpilatzeko lanak egiten ditu. Swift, Objective-C edo C/C++ den ala ez.

Copy Bundle Resources aplikazioaren xederako erlazionatutako baliabide guztiak aplikazio multzoan kopiatzen ditu. Aplikazioaren kode eta baliabide guztien moduko edukiontzia irudiak, bideoak, kateak lokalizatuak eta abar barne.


Bi eraikuntza-fase hauek malgutasun handia ematen diete aplikazioei, helburu berri bakoitzak bere eraikuntza-faseak eskaintzen baititu, goiko bi urratsak barne. Enpresei edukia pertsonalizatzeko modua eskaintzen dieten etiketa zuriko aplikazioek teknika hau erabiltzen dute, besteak beste.


Baliteke zure aplikazioei eduki desberdinak eskaini nahi izatea, exekutatzen diren plataformaren arabera. Erabili ditzagun eraikuntza fase hauek gure onurarako eta eman ditzagun bi eduki iturri ezberdin horretarako.


Lehenik eta behin, erabil dezagunSwift Protokolo bat egitura edo klase batek betetzea espero duen kontratua emateko.


 protocol ContentManager { var content: [Content] { get } }


Jarraian, ikus ditzagun protokoloaren bi inplementatzaileei. Hona hemen lehenengoa:


 class TargetAppAContentManager : ContentManager { var content: [Content] { return [ Content(name: TargetAppAContentIdentifier.videoOneName.rawValue, image: TargetAppAImagePreviewIdentifier.videoOnePreview.rawValue, video: TargetAppAImageVideoIdentifier.videoOneVideo.rawValue), Content(name: TargetAppAContentIdentifier.videoTwoName.rawValue, image: TargetAppAImagePreviewIdentifier.videoTwoPreview.rawValue, video: TargetAppAImageVideoIdentifier.videoTwoVideo.rawValue), Content(name: TargetAppAContentIdentifier.videoThreeName.rawValue, image: TargetAppAImagePreviewIdentifier.videoThreePreview.rawValue, video: TargetAppAImageVideoIdentifier.videoThreeVideo.rawValue), ] return contentToShow } }


TargetAppAContentManager aplikazioaren lehen xederako erabiltzen den inplementazio zehatza da. Content sorta bat eskaintzen du, xederako aplikazio-sortan aurkitutako baliabide-izenei erreferentzia egiten diena.


 class TargetAppBContentManager : ContentManager { var content: [Content] { return [ Content(name: TargetAppBContentIdentifier.videoOneName.rawValue, image: TargetAppBImagePreviewIdentifier.videoOnePreview.rawValue, video: TargetAppBImageVideoIdentifier.videoOneVideo.rawValue), Content(name: TargetAppBContentIdentifier.videoTwoName.rawValue, image: TargetAppBImagePreviewIdentifier.videoTwoPreview.rawValue, video: TargetAppBImageVideoIdentifier.videoTwoVideo.rawValue), Content(name: TargetAppBContentIdentifier.videoThreeName.rawValue, image: TargetAppBImagePreviewIdentifier.videoThreePreview.rawValue, video: TargetAppBImageVideoIdentifier.videoThreeVideo.rawValue), ] } }


Hurrengoa TargetAppBContentManager da, bigarren aplikazioaren xederako erabiltzen den inplementazio zehatza. Lehen inplementazioaren oso antzekoa dirudi, B aplikazioan izan ezik, identifikatzaile desberdinak dira.


Bi inplementazioak sortuta, orain zeharka aipa ditzakezu zure kodean objektuaren mota ContentManager -en ezarriz. Begiratu beheko ViewModel adibidea:


 @Observable class VideoListViewModel { var contentManager: ContentManager init(contentManager: ContentManager) { self.contentManager = contentManager } }


ViewModel-ek ContentManager mota bat bere hasieratzaile bidez pasatzea espero du. ViewModel edozein ContentManager motak pasa daiteke eta espero bezala funtzionatzen jarraitu. Horrek esan nahi du ViewModel aplikazioaren bi helburuetan berrerabili daitekeela.


Egin beharreko azken gauza edukien kudeatzaile zuzena Konpilatu Iturburuak fasean gehitzen dela ziurtatzea da. Kasu honetan, A aplikazioa TargetAppAContentMananger pasatzen zaio bere iturrien zati gisa, eta B aplikazioari TargetAppBContentManager pasatzen zaio.


Gehitu Eduki-kudeatzailea Iturriak Konpilatzeko Eraikuntza-fasean

App Bundle baliabideak gehitzea

Egin beharreko azken gauza da aplikazio sorta bakoitzak aplikazioak erabiltzen dituen identifikatzaileekin bat datozen izenekin baliabideak dituela ziurtatzea. Modu erraza da aplikazioaren xede bakoitzaren Copy Bundle Resources eraikitzeko fasea egiaztatzea eta edukien kudeatzaileak baliabideak aipatzen dituela ziurtatzea. Hala ez bada, arrastatu zure Xcode proiektutik kopia baliabideen fasera.


Honek denbora eta arreta pixka bat behar du probak egiteko, ez baituzu konpilazio garaiko errorerik jasoko aipatzen ari den baliabide bat sortan eskuragarri ez badago. Exekutatu bitartean, hutsegite bat izango duzu!


Egiaztapena automatizatzeko modu ona unitate-test bat idaztea da, ContentManager ek aipatzen dituen baliabide guztiak sortan gordeta daudela baieztatzeko. Exekutatzen denean probak huts egiten badu, badakizu sortan baliabide bat falta dela.

Nora joan hurrengoa?

Honaino iritsi bazara, zure aplikazioa Appleko beste plataforma batzuetara nola eraman jakiteko ideia ona izan beharko zenuke.


Post hau borobiltzeko, gomendatzen ditudan aholku eta baliabide pare bat utziko dizkizut:


  1. Lehendik dagoen aplikazio bati Apple Vision-en laguntza gehitzen badiozu, lehenik eta behin, migratu zure kodea UIKit-etik SwiftUIra ahalik eta gehien. SwiftUIra migratzean lehendik dagoen aplikazio batek Vision Pro-n funtzionatzen duen abiadura ikusita, erabilgarria da fidatu ahal izatea.


  2. Irakurri Appleren jarraibideak lehendik dauden aplikazioak visionOSera ekartzeko . Aholku eta iradokizun baliagarriak eskaintzen ditu nola egin eta nola aprobetxatu visionOS funtzioak.


  3. Zuk zeuk plataforma anitzeko aplikazio berri bat abiaraztea pentsatzen ari bazara, Xcode-n Multiplataforma fitxa bat dago eskuragarri, erabiltzeko hainbat aplikazio txantiloi eskaintzen dituena. WWDC 2022ko bideo bat ere badago gaiari buruz.


  4. Hainbat plataformatan funtzionatzen duten aplikazioen adibideak ikusi nahi badituzu, Gabonetako Chill eta Ocean Chill nire aplikazio pertsonalak ikustea gomendatzen dizut. tvOS eta Vision Pro-n funtzionatzen duten bi aplikazio dira, kode-oinarri bakar batetik eraikiak. (Laster izango da Ocean Chill-erako tvOS laguntza!)