paint-brush
របៀបបង្កើតគម្រោង Xcode របស់អ្នកសម្រាប់វេទិកាជាច្រើននៅទូទាំង Apple Ecosystemដោយ@darrylbayliss
165 ការអាន ប្រវត្តិសាស្ត្រថ្មី។

របៀបបង្កើតគម្រោង Xcode របស់អ្នកសម្រាប់វេទិកាជាច្រើននៅទូទាំង Apple Ecosystem

ដោយ Darryl Bayliss9m2025/02/12
Read on Terminal Reader

យូរ​ពេក; អាន

ស្វែងយល់ពីរបៀបបង្កើតគម្រោង Xcode របស់អ្នកសម្រាប់វេទិកាជាច្រើននៅទូទាំង Apple Ecosystem។
featured image - របៀបបង្កើតគម្រោង Xcode របស់អ្នកសម្រាប់វេទិកាជាច្រើននៅទូទាំង Apple Ecosystem
Darryl Bayliss HackerNoon profile picture
0-item
1-item

នៅខែមិថុនា ឆ្នាំ 2023 នៅពេលដែល Apple បានប្រកាស Vision Pro ខ្ញុំមានគំនិតមួយ ដែលអាចដំណើរការបានល្អនៅលើកាស - បណ្តុំនៃវីដេអូរង្វិលជុំដែលលេងជាមួយការប្រើប្រាស់ប្រចាំថ្ងៃរបស់អ្នក។ ខ្ញុំ​មាន​កម្មវិធី​មួយ​ដែល​អាច​ធ្វើ​វា​បាន​ហើយ​ដែល​ហៅ​ថា Christmas Chill ជា​អ្វី​ដែល ​ខ្ញុំ​បាន​បង្កើត​ឡើង ​នៅ​ពេល​ដែល Apple TV ទី 1 ដែល​គាំទ្រ App Store ត្រូវ​បាន​ធ្វើ​ឱ្យ​មាន។ វា​មាន​លក្ខណៈ​ពិសេស​នៃ​បណ្តុំ​នៃ​វីដេអូ​រង្វិលជុំ​ដែល​អ្នក​អាច​ប្រើ​ជា​ផ្ទាំង​ខាងក្រោយ​នៃ​ពិធីបុណ្យ។


ជារៀងរាល់ឆ្នាំក្នុងរដូវរងា ខ្ញុំចំណាយពេលពីរបីថ្ងៃដើម្បីកែលម្អវា បន្ថែមខ្លឹមសារថ្មី និងកែលម្អមូលដ្ឋានកូដ។ ការផ្លាស់ប្តូរដ៏ធំមួយដែលបានធ្វើឡើងចំពោះគម្រោងនេះបានកើតឡើងនៅក្នុងខែធ្នូ ឆ្នាំ 2023 នៅពេលដែល UI ត្រូវបានផ្លាស់ប្តូរពី UIKit និង Storyboards ទៅ SwiftUI ។


ជាការប្រសើរណាស់, ភាគច្រើនបានធ្វើចំណាកស្រុក។ ខ្ញុំត្រូវការទិដ្ឋភាពដែលគាំទ្រដោយ AVPlayer រុំក្នុង UIViewRepresentable ។ API ដ៏អស្ចារ្យដែលផ្តល់នូវអន្តរប្រតិបត្តិការរវាង UIKit និង SwiftUI ប្រសិនបើអ្នកត្រូវការ។


ខ្ញុំមានការស្ទាក់ស្ទើរក្នុងការធ្វើចំណាកស្រុកឱ្យបានឆាប់ ដោយសារខ្ញុំមានការយល់ដឹងល្អអំពី Declarative UI និងគោលគំនិតរបស់វាពីការងារផ្សេងទៀតជាមួយ React និង Jetpack Compose ។ វាបានផ្លាស់ប្តូរសម្រាប់ខ្ញុំជាមួយនឹងការណែនាំរបស់ Apple អំពី Apple Vision Pro និងការគាំទ្ររបស់វាសម្រាប់ SwiftUI ។ Christmas Chill គឺជាគម្រោងដ៏ល្អមួយក្នុងការរក្សាចំណេះដឹង Apple Dev របស់ខ្ញុំឱ្យទាន់សម័យ ហើយខ្ញុំពិតជាចង់ទទួលបានបទពិសោធន៍ក្នុងការពង្រីកកម្មវិធីទៅកាន់ឧបករណ៍ផ្សេងៗ។


នៅពេលដែលការធ្វើចំណាកស្រុកឆ្នាំ 2023 ទៅ SwiftUI សម្រាប់ Christmas Chill ត្រូវបានបញ្ចប់ ខ្ញុំបានកំណត់នៅឆ្នាំ 2024 ដើម្បីបន្ថែមការគាំទ្រសម្រាប់ Vision Pro ។ ខាងក្រោមនេះជារបៀបដែលខ្ញុំបាននិយាយអំពីវា និងអ្វីដែលខ្ញុំណែនាំ ប្រសិនបើអ្នកកំពុងព្យាយាមធ្វើដូចគ្នាសម្រាប់កម្មវិធីផ្ទាល់ខ្លួនរបស់អ្នក។

ការបន្ថែមវេទិកាថ្មី។

ដើម្បីចាប់ផ្តើម គម្រោងត្រូវតែអាចសាងសង់សម្រាប់ Vision Pro ជាគោលដៅ។ ការធ្វើបែបនេះគឺងាយស្រួលគួរឱ្យភ្ញាក់ផ្អើល! នៅខាងក្នុង Xcode ជ្រើសរើសឯកសារ .xcodeproj ហើយនៅក្រោមបញ្ជីទម្លាក់ចុះ នៃទិសដៅដែលបានគាំទ្រ ចុចប៊ូតុងបូក។


គោលដៅដែលបានគាំទ្រ



ការទម្លាក់ចុះនៃវេទិកា Apple ដែលមានទាំងអស់លេចឡើង។ ដាក់លើវេទិកាដែលចង់បានដើម្បីបន្ថែមជាទិសដៅ ក្នុងករណីនេះ Apple Vision ហើយបន្ទាប់មកចុច Apple Vision នៅក្នុងផ្នែកដែលទើបនឹងបង្ហាញ។


បន្ថែម Apple Vision Pro Destination



ការលេចឡើងតូចមួយនឹងលេចឡើងដើម្បីជូនដំណឹងអ្នកអំពីការផ្លាស់ប្តូរ Xcode ត្រូវធ្វើដល់គោលដៅ។ ចុច បើក


បើកដំណើរការជំនួយគោលដៅ


បន្ទាប់មក បង្កើតកម្មវិធីដោយប្រើ visionOS Simulator។ ប្រសិនបើអ្នកមាន Vision Pro ដល់ដៃ អ្នកអាចស្វែងរកការណែនាំអំពីរបៀបដំឡើងវានៅលើឧបករណ៍របស់អ្នក នៅទីនេះ


ក្នុងអំឡុងពេលចងក្រង វាទំនងជា Xcode នឹងរកឃើញកំហុសក្នុងការចងក្រង ហើយ/ឬកម្មវិធីនឹងគាំង។ នេះត្រូវបានរំពឹងទុក និងជាការអនុវត្តក្នុងការអត់ធ្មត់។ ចាប់ពីចំណុចនេះ អ្នកត្រូវជួសជុលកំហុសក្នុងគម្រោងរបស់អ្នក រហូតដល់កម្មវិធីចងក្រង ហើយលែងគាំង។


ក្នុងករណីរបស់ខ្ញុំ វាចំណាយពេលប្រហែល 30 នាទី ដោយសារផ្នែកខ្លះនៃការខិតខំប្រឹងប្រែងក្នុងការផ្ទេរកម្មវិធីពី UIKit ទៅ SwiftUI ពីមុន!

ប្លុកចងក្រងតាមលក្ខខណ្ឌ

SwiftUI ជាស្នូលរបស់វា គឺជាក្របខ័ណ្ឌពហុវេទិកា ដែលមានន័យថាគ្រាន់តែចងក្រងកូដ SwiftUI សម្រាប់វេទិកាផ្សេងគ្នា វានឹងផ្លាស់ប្តូររូបរាងរបស់វា។ ដោយគិតពីរចនាប័ទ្មវេទិកា និងវិធីសាស្រ្តផ្សេងៗនៃអន្តរកម្ម។


ខណៈពេលដែលវាជួយធ្វើឱ្យមានភាពជឿនលឿនក្នុងអំឡុងការអភិវឌ្ឍន៍ អ្នកប្រហែលជាចង់បានការគ្រប់គ្រងបន្ថែមទៀតលើរបៀបដែលកម្មវិធីលេចឡើង និងទាញយកអត្ថប្រយោជន៍ពីភាពខ្លាំងរបស់វេទិកានីមួយៗ។ ឧទាហរណ៍ដ៏ល្អមួយគឺសមត្ថភាព Vision Pro's Immersion; SwiftUI ផ្តល់ API សម្រាប់ការនេះតាមរយៈ ImmersiveSpace ដែលជា API មានសម្រាប់តែ visionOS ប៉ុណ្ណោះ។


ប្រសិនបើអ្នកព្យាយាមប្រើ API នេះ ខណៈពេលដែលកំពុងចងក្រងគម្រោងសម្រាប់ Apple TV នោះ Xcode នឹងបោះកំហុសដែលជូនដំណឹងថា API នេះមិនមានទេ។


ដូច្នេះ តើ​មាន​ដំណោះស្រាយ​អ្វី​ដើម្បី​បញ្ចៀស​ស្ថានភាព​នេះ? ចម្លើយបានមកពីការប្រើប្រាស់ Conditional Compilation Blocks ។ ប្លុកចងក្រងគឺជាផ្នែកនៃកូដដែលផ្តល់ការណែនាំសម្រាប់ពេលដែលអ្នកចងក្រងគួរចងក្រងកូដនៅក្នុងប្លុក។


ខណៈពេលដែលពួកគេគាំទ្រលក្ខខណ្ឌផ្សេងៗ អត្ថប្រយោជន៍បំផុតសម្រាប់តម្រូវការរបស់យើងគឺការរកឃើញថាវេទិកាណាមួយដែលកូដកំពុងត្រូវបានចងក្រងសម្រាប់។ អ្នក​អាច​ធ្វើ​វា​បាន​ដោយ​គ្រាន់​តែ​បន្ទាត់​កូដ​មួយ​ចំនួន​ប៉ុណ្ណោះ៖


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


មុខងារដ៏ល្អដែល Xcode ធ្វើដើម្បីគាំទ្រដល់ប្លុកចងក្រងតាមលក្ខខណ្ឌគឺត្រូវបញ្ជាក់ឱ្យច្បាស់ថាតើកូដណាមួយនឹងចងក្រងអាស្រ័យលើវេទិកាដែលបានជ្រើសរើសសម្រាប់ការចងក្រង។ វាក៏នឹងបន្ថយកូដបន្តិច ដែលនឹងមិនត្រូវបានគេចងក្រង។


ប្លុកចងក្រងតាមលក្ខខណ្ឌ

ការចាក់ដោយពឹងផ្អែកតាមរយៈ Build Phases

ល្បិចដ៏មានប្រយោជន៍មួយបន្ថែមទៀតដែលខ្ញុំបានរកឃើញគឺការប្រើ ប្រភពចងក្រង និង ចម្លងធនធានបណ្តុំ បង្កើតដំណាក់កាលជាទម្រង់នៃការចាក់បញ្ចូលភាពអាស្រ័យ។ ដំណើរការទាំងនេះដំណើរការនៅពេលដែលកម្មវិធីត្រូវបានបង្កើត ហើយអាចរកបាននៅក្រោមផ្ទាំង Build Phases ក្នុងគម្រោង Xcode។


បង្កើតដំណាក់កាល


Compile Sources ធ្វើអោយការចងក្រងកូដប្រភពរបស់អ្នកទៅជាកូដម៉ាស៊ីន។ មិនថាវាជា Swift, Objective-C ឬសូម្បីតែ C/C++ ។

ចម្លងធនធានកញ្ចប់ ចម្លងធនធានដែលពាក់ព័ន្ធទាំងអស់សម្រាប់គោលដៅកម្មវិធីទៅក្នុង កញ្ចប់កម្មវិធីធុងនៃប្រភេទ សម្រាប់កូដ និងធនធានរបស់កម្មវិធីទាំងអស់ រួមទាំងរូបភាព វីដេអូ ខ្សែអក្សរដែលអាចបំប្លែងបាន និងច្រើនទៀត។


ដំណាក់កាលបង្កើតទាំងពីរនេះផ្តល់នូវភាពបត់បែនច្រើនដល់កម្មវិធី ដោយសារគោលដៅថ្មីនីមួយៗផ្តល់នូវដំណាក់កាលបង្កើតផ្ទាល់ខ្លួន រួមទាំងជំហានទាំងពីរខាងលើ។ កម្មវិធី Whitelabel ដែលផ្តល់មធ្យោបាយសម្រាប់អាជីវកម្មក្នុងការកំណត់មាតិការបស់ពួកគេតាមបំណងប្រើប្រាស់បច្ចេកទេសនេះ ក្នុងចំណោមកម្មវិធីផ្សេងទៀត។


អ្នកអាចរកឃើញថាអ្នកចង់ផ្តល់មាតិកាខុសៗគ្នាសម្រាប់កម្មវិធីផ្ទាល់ខ្លួនរបស់អ្នក អាស្រ័យលើវេទិកាដែលពួកគេដំណើរការ។ ចូរប្រើដំណាក់កាលបង្កើតទាំងនេះ ដើម្បីផលប្រយោជន៍របស់យើង ហើយផ្តល់ប្រភពខ្លឹមសារពីរផ្សេងគ្នាដើម្បីធ្វើវា។


ជាដំបូង សូមប្រើពិធីការ Swift ដើម្បីផ្តល់កិច្ចសន្យាដែលរំពឹងថានឹងបំពេញដោយរចនាសម្ព័ន្ធ ឬថ្នាក់។


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


បន្ទាប់មក សូមក្រឡេកមើលអ្នកអនុវត្តពីរនៃពិធីការ។ នេះគឺជាទីមួយ៖


 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 គឺជាការអនុវត្តជាក់ស្តែងដែលប្រើសម្រាប់គោលដៅកម្មវិធីដំបូង។ វាផ្តល់នូវអារេនៃ Content ដែលសំដៅលើឈ្មោះធនធានដែលរកឃើញនៅក្នុងកញ្ចប់កម្មវិធីសម្រាប់គោលដៅ។


 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), ] } }


បន្ទាប់គឺ TargetAppBContentManager ដែលជាការអនុវត្តជាក់ស្តែងដែលប្រើសម្រាប់គោលដៅកម្មវិធីទីពីរ។ វាមើលទៅស្រដៀងនឹងការអនុវត្តដំបូង លើកលែងតែកម្មវិធី B ការកំណត់អត្តសញ្ញាណគឺខុសគ្នា។


ជាមួយនឹងការអនុវត្តទាំងពីរដែលបានបង្កើតឡើង ឥឡូវនេះអ្នកអាចយោងទៅពួកវាដោយប្រយោលនៅក្នុងកូដរបស់អ្នកដោយកំណត់ប្រភេទនៃវត្ថុទៅជា ContentManager ។ សូមពិនិត្យមើលឧទាហរណ៍ ViewModel ខាងក្រោម៖


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


ViewModel រំពឹងថាប្រភេទ ContentManager នឹងឆ្លងកាត់តាមរយៈកម្មវិធីចាប់ផ្តើមរបស់វា។ ViewModel អាចត្រូវបានឆ្លងកាត់ដោយប្រភេទនៃ ContentManager និងបន្តដំណើរការដូចការរំពឹងទុក។ នេះក៏មានន័យថា ViewModel អាចត្រូវបានប្រើឡើងវិញនៅទូទាំងគោលដៅកម្មវិធីទាំងពីរ។


រឿងចុងក្រោយដែលត្រូវធ្វើគឺត្រូវធានាថា ContentManager ត្រឹមត្រូវត្រូវបានបន្ថែមទៅដំណាក់កាល Compile Sources។ ក្នុងករណីនេះ App A ត្រូវបានឆ្លងកាត់ TargetAppAContentMananger ជាផ្នែកនៃប្រភពរបស់វា ហើយ App B ត្រូវបានឆ្លងកាត់ TargetAppBContentManager


បន្ថែមកម្មវិធីគ្រប់គ្រងមាតិកាដើម្បីចងក្រងប្រភពបង្កើតដំណាក់កាល

ការបន្ថែមធនធានកម្មវិធីកញ្ចប់

កិច្ចការចុងក្រោយដែលត្រូវធ្វើគឺត្រូវធានាថា Bundle កម្មវិធីនីមួយៗមានធនធានដែលមានឈ្មោះដែលត្រូវគ្នានឹងគ្រឿងសម្គាល់ដែលប្រើដោយកម្មវិធី។ មធ្យោបាយងាយស្រួលគឺពិនិត្យមើលដំណាក់កាលបង្កើត Copy Bundle Resources នៃគោលដៅកម្មវិធីនីមួយៗ និងធានាថាធនធានត្រូវបានបញ្ជូនទៅដោយអ្នកគ្រប់គ្រងមាតិកា។ បើមិនដូច្នោះទេអូសពួកវាពីគម្រោង Xcode របស់អ្នកទៅក្នុងដំណាក់កាលធនធានចម្លង។


វាត្រូវការពេលវេលា និងយកចិត្តទុកដាក់បន្តិចដើម្បីសាកល្បង ព្រោះថាអ្នកមិនទទួលបានកំហុសពេលចងក្រង ប្រសិនបើធនធានដែលសំដៅទៅមិនមាននៅក្នុងកញ្ចប់នោះ។ កំឡុងពេលដំណើរការ អ្នកនឹងជួបគ្រោះថ្នាក់!


មធ្យោបាយដ៏ល្អក្នុងការធ្វើការត្រួតពិនិត្យដោយស្វ័យប្រវត្តិគឺត្រូវសរសេរការធ្វើតេស្តឯកតាដើម្បីបញ្ជាក់ធនធានទាំងអស់ដែលត្រូវបានបញ្ជូនទៅដោយ ContentManager ត្រូវបានរក្សាទុកក្នុងកញ្ចប់។ ប្រសិនបើការធ្វើតេស្តបរាជ័យនៅពេលដំណើរការ នោះអ្នកដឹងថាមានធនធានដែលបាត់នៅក្នុងកញ្ចប់។

កន្លែងដែលត្រូវទៅបន្ទាប់?

ប្រសិនបើអ្នកបានមកដល់ពេលនេះ អ្នកគួរតែមានគំនិតល្អអំពីរបៀបនាំយកកម្មវិធីរបស់អ្នកទៅកាន់ Apple Platforms ផ្សេងទៀត។


ដើម្បីបញ្ចប់ការបង្ហោះនេះ ខ្ញុំនឹងទុកឱ្យអ្នកនូវគន្លឹះ និងធនធានមួយចំនួនដែលខ្ញុំណែនាំ៖


  1. ប្រសិនបើបន្ថែមជំនួយ Apple Vision ទៅកម្មវិធីដែលមានស្រាប់ ជាដំបូង ផ្ទេរកូដរបស់អ្នកឱ្យបានច្រើនពី UIKit ទៅ SwiftUI តាមដែលអាចធ្វើបាន។ ដោយបានឃើញល្បឿននៃកម្មវិធីដែលមានស្រាប់ដែលកំពុងដំណើរការនៅលើ Vision Pro នៅពេលប្តូរទៅ SwiftUI វាមានប្រយោជន៍ក្នុងការពឹងផ្អែក។


  2. សូមអានការណែនាំរបស់ Apple ក្នុង ការនាំយកកម្មវិធីដែលមានស្រាប់ទៅកាន់ visionOS ។ វាផ្តល់នូវការណែនាំ និងការណែនាំដ៏មានប្រយោជន៍អំពីរបៀបធ្វើវា និងរបៀបទាញយកអត្ថប្រយោជន៍ពីមុខងារ visionOS។


  3. ប្រសិនបើអ្នកកំពុងគិតចង់ចាប់ផ្តើមកម្មវិធីពហុវេទិកាថ្មីដោយខ្លួនឯង មានផ្ទាំងពហុវេទិកាដែលមាននៅក្នុង Xcode ដែលផ្តល់នូវគំរូកម្មវិធីមួយចំនួនដែលត្រូវប្រើ។ វាក៏មាន វីដេអូពី WWDC 2022 ស្តីពីប្រធានបទផងដែរ។


  4. ប្រសិនបើអ្នកចង់ឃើញឧទាហរណ៍នៃកម្មវិធីដែលដំណើរការលើវេទិកាជាច្រើន ខ្ញុំសូមណែនាំឱ្យពិនិត្យមើលកម្មវិធីផ្ទាល់ខ្លួនរបស់ខ្ញុំ Christmas Chill និង Ocean Chill ។ ទាំងនេះគឺជាកម្មវិធីពីរដែលដំណើរការលើ tvOS និង Vision Pro ដែលបង្កើតឡើងពីមូលដ្ឋានកូដតែមួយ។ (ការគាំទ្រ tvOS សម្រាប់ Ocean Chill នឹងមកដល់ឆាប់ៗនេះ!)


L O A D I N G
. . . comments & more!

About Author

Darryl Bayliss HackerNoon profile picture
Darryl Bayliss@darrylbayliss
10+ years of experience working with businesses to achieve their goals through software.

ព្យួរស្លាក

អត្ថបទនេះត្រូវបានបង្ហាញនៅក្នុង...