Kaip ištaisyti „MacOS SwiftUI“ programos nuotraukų leidimų srautą

Temp mail SuperHeros
Kaip ištaisyti „MacOS SwiftUI“ programos nuotraukų leidimų srautą
Kaip ištaisyti „MacOS SwiftUI“ programos nuotraukų leidimų srautą

„MacOS SwiftUI Apps“ nuotraukų leidimo problemos supratimas

„MacOS“ programos, kuri integruota su nuotraukų biblioteka, kūrimas gali būti naudinga, tačiau sudėtinga patirtis. Jei kūrėte „SwiftUI“ programą ir susidūrėte su nuotraukų leidimų srauto problemomis, nesate vieni. Tai dažna kliūtis kūrėjams, ypač nustatant reikiamas sistemos privatumo nustatymų konfigūracijas. 😅

„MacOS“ sistemoje norint užklausti prieigos prie jautrių išteklių, pvz., nuotraukų bibliotekos, reikia atlikti kelis svarbius veiksmus. Įprasta eiga apima „Info.plist“ atnaujinimą, smėlio dėžės nustatymų konfigūravimą ir tinkamų API, pvz., „PHPhotoLibrary“, naudojimą. Tačiau net jei atrodo, kad visi tinkami elementai yra vietoje, viskas ne visada veikia taip, kaip tikėtasi, pvz., kai programa nerodoma skirtuko Privatumas sistemos nuostatose. 😕

Kai dirbate su „SwiftUI“, jau gali būti nustatyta, kad vartotojo sąsaja prašo prašyti leidimų ir rodyti būsenos naujinimus, tačiau jei programa nerodoma privatumo ir saugos nustatymų skiltyje Nuotraukos, tai gali likti subraižytas. tavo galva. Išsiaiškinkime šios problemos esmę ir išnagrinėkime galimus pataisymus, kad jūsų programai sklandžiai būtų suteikta reikiama prieiga.

Tolesniuose skyriuose paaiškinsime, kaip užtikrinti, kad jūsų programa būtų tinkamai sukonfigūruota prašyti nuotraukų leidimų „MacOS“. Pateiksime būtinus kodo koregavimus, leidimų srauto įžvalgas ir net pasidalinsime geriausios praktikos pavyzdžiais, kad padėtume jūsų programai veikti taip, kaip tikėtasi. Taigi, išgerkite kavos ☕ ir pasinerkite!

komandą Naudojimo pavyzdys
PHPhotoLibrary.authorizationStatus(for:) Naudojama norint patikrinti dabartinę prieigos prie nuotraukų bibliotekos prieigos būseną. Jis grąžina PHAuthorizationStatus tipo reikšmę, kuri gali būti .authorized, .nied, .restricted arba .notDetermined.
PHPhotoLibrary.requestAuthorization(for:) Prašo leidimo pasiekti nuotraukų biblioteką. Šis metodas suaktyvina sistemos raginimą vartotojui suteikti arba uždrausti prieigą. Tai būtina norint tvarkyti vartotojo sutikimą dėl prieigos prie privačių duomenų.
PHFetchOptions Naudojama norint apibrėžti išteklių gavimo iš nuotraukų bibliotekos parinktis, pvz., apriboti gautų išteklių skaičių. Pavyzdyje jis apriboja gavimą iki 1 ištekliaus su fetchLimit nuosavybe.
PHAsset.fetchAssets(with:options:) Gauna išteklius (pvz., nuotraukas ar vaizdo įrašus) iš nuotraukų bibliotekos, naudodamas nurodytas gavimo parinktis. Tai labai svarbu norint bendrauti su nuotraukų biblioteka ir gauti laikmeną.
DispatchQueue.main.async Naudojamas pagrindinės gijos vartotojo sąsajai atnaujinti. Kadangi autorizacijos užklausos yra asinchroninės, svarbu tai naudoti NS naujinimams atlikti, kai leidimo užklausa bus baigta.
@State Naudojamas SwiftUI, kad būtų sukurtas būsenos kintamasis, galintis laikyti ir sekti keičiamus duomenis rodinyje. Tai būtina norint valdyti prieigos būseną ir kitas dinamines reikšmes programos vartotojo sąsajoje.
.onAppear SwiftUI rodinio modifikatorius, kuris vykdo kodo bloką, kai vaizdas pasirodo ekrane. Tai naudinga norint suaktyvinti įgaliojimų patikrinimus ir kitus veiksmus, kai vaizdas įkeliamas.
Text() Rodo tekstą SwiftUI rodinyje. Jis naudojamas pranešimams vartotojui rodyti, pvz., nuotraukų bibliotekos prieigos būsenai arba bet kokiems susijusiems atsiliepimams.
Button() „SwiftUI“ sukuria paliestą mygtuką, kuris spustelėjus vykdo kodo bloką. Pavyzdyje jis naudojamas veiksmams, pvz., prašymui suteikti leidimus arba nuotraukų bibliotekos gavimui, suaktyvinti.
.foregroundColor() Naudojamas pakeisti teksto spalvą SwiftUI. Čia jis naudojamas norint vizualiai nurodyti nuotraukų leidimo būseną (žalia – suteikta, raudona – atmesta ir pan.).

„MacOS SwiftUI“ programėlės nuotraukų leidimų srauto supratimas

Pateiktame „SwiftUI“ kode bandome įdiegti funkciją, kai programa prašo prieigos prie nuotraukų bibliotekos naudojant „Apple“ PHPhotoLibrary API. Tai apima daugybę veiksmų, pradedant dabartinės prieigos būsenos patikrinimu ir baigiant leidimų prašymu ir galiausiai bandymu gauti išteklius iš nuotraukų bibliotekos. Pirmasis esminis scenarijaus žingsnis yra skambinimas PHPhotoLibrary.authorizationStatus(for:) funkcija. Ši funkcija patikrina esamą programos prieigos prie nuotraukų bibliotekos prieigos būseną. Šio skambučio rezultatas gali būti viena iš keturių reikšmių: .notDetermined, .authorized, .denied arba .restricted. Tada programa naudoja šią informaciją, kad nustatytų, kokių veiksmų reikia imtis – ar rodyti leidimo užklausos mygtuką, ar parodyti pranešimą, paaiškinantį, kad prieiga uždrausta. Pavyzdžiui, jei vartotojas jau atmetė leidimą, programa rodo pranešimą, raginantį eiti į sistemos nuostatas, kad rankiniu būdu įgalintų prieigą.

Kita klavišo komanda yra PHPhotoLibrary.requestAuthorization(for:), kuris naudojamas prašyti prieigos prie nuotraukų bibliotekos. Kai ši komanda iškviečiama, sistema paragina vartotoją pateikti leidimo užklausos dialogo langą. Tai asinchroninė operacija, o kai vartotojas atsako, programa turi tinkamai apdoroti atsakymą. Scenarijuje naudojame DispatchQueue.main.async uždarymą, kad užtikrintume, jog bet kokie vartotojo sąsajos naujiniai įvyktų pagrindinėje gijoje, vartotojui pasirinkus. Pavyzdžiui, jei vartotojas suteikia leidimą, programa pradeda gauti ir rodyti nuotraukas. Neatsižvelgus į tai, programa gali bandyti atnaujinti vartotojo sąsają iš fono gijos, sukeldama galimas strigtis arba netinkamą elgesį. Pavyzdys realiame gyvenime: pagalvokite apie programą, pvz., nuotraukų redagavimo įrankį, kuriam reikia prašyti prieigos prie naudotojo nuotraukų bibliotekos. Jei programa netinkamai valdo srautą, vartotojas gali sutrikti, kai suteikęs leidimą nemato laukiamo rezultato.

Kita svarbi kodo dalis yra naudojimas PHFetchOptions ir PHAsset.fetchAssets(su:parinktys:). Šios komandos naudojamos norint sąveikauti su nuotraukų biblioteka ir gauti išteklius (pvz., vaizdus ar vaizdo įrašus). The PHFetchOptions klasė naudojama norint nurodyti bet kokius filtrus arba gavimo operacijos apribojimus. Pavyzdžiui, kodo fragmentas apriboja gavimą iki vieno ištekliaus su fetchLimit ypatybę, kuri gali būti naudinga tais atvejais, kai programai reikia tik nedaug elementų, kad būtų rodomas ar apdorotas. Baigus gavimo operaciją, programa registruoja gautų išteklių skaičių, o tai naudinga derinant ir užtikrinant, kad programa tinkamai pasiekia biblioteką. Įsivaizduokite scenarijų, kai nuotraukų peržiūros programoje norite rodyti tik naujausią vaizdą. Apribojus gautų išteklių skaičių, galima efektyviau naudoti atmintį ir greičiau apdoroti.

„SwiftUI“ specifiniai komponentai kode, pvz., „ @Valstybė ir .Pasirodo modifikatoriai atlieka lemiamą vaidmenį valdant būseną ir suaktyvinant veiksmus programos vartotojo sąsajoje. The @Valstybė ypatybės įvynioklis naudojamas autorizacijos būsenai ir žurnalo pranešimams sekti, todėl vartotojo sąsaja gali dinamiškai atnaujinti reaguojant į pakeitimus. The .Pasirodo modifikatorius užtikrina, kad programėlė patikrintų nuotraukų prieigos būseną iškart, kai tik pasirodys rodinys, kad vartotojas matytų teisingą informaciją pirmą kartą atidaręs programą. Pavyzdžiui, jei programa nustato, kad vartotojas dar nesuteikė leidimo, rodomas mygtukas „Prašyti prieigos“. Šis metodas pagerina vartotojo patirtį, nes užtikrina, kad programa visada būtų sinchronizuota su sistemos būsena. Realus pavyzdys būtų programa, kuriai reikalingas leidimas pasiekti neskelbtinus duomenis, pvz., banko programa, kuri prašo biometrinio autentifikavimo, kai vartotojas atidaro programą pirmą kartą.

„MacOS SwiftUI Apps“ nuotraukų leidimų problemos supratimas

Programavimo režimas: „SwiftUI“ ir „MacOS Photos Framework“.

import SwiftUIimport Photosstruct PhotosPermissionView: View {    @State private var authorizationStatus: PHAuthorizationStatus = .notDetermined    @State private var logMessage: String = "Waiting for user action..."    var body: some View {        VStack(spacing: 20) {            Text("Photos Permission")                .font(.largeTitle)                .padding()            if authorizationStatus == .authorized || authorizationStatus == .limited {                Text("Access to Photos Library granted!")                    .foregroundColor(.green)                Text(logMessage)                    .font(.caption)                    .foregroundColor(.gray)                Button("Fetch Photos Library") {                    fetchPhotosLibrary()                }                .buttonStyle(.borderedProminent)            } else if authorizationStatus == .denied || authorizationStatus == .restricted {                Text("Access to Photos Library denied.")                    .foregroundColor(.red)                Text("You can enable access in System Preferences.")                    .font(.caption)                    .foregroundColor(.gray)            } else {                Text("Permission to access Photos is not yet determined.")                    .foregroundColor(.orange)                Button("Request Access") {                    requestPhotosPermissionAndTriggerUI()                }                .buttonStyle(.borderedProminent)            }        }        .padding()        .onAppear {            checkPhotosAuthorizationStatus()        }    }    private func checkPhotosAuthorizationStatus() {        authorizationStatus = PHPhotoLibrary.authorizationStatus(for: .readWrite)        logMessage = "Current Photos authorization status: \(authorizationStatus.rawValue)"        print(logMessage)    }    private func requestPhotosPermissionAndTriggerUI() {        print("Requesting Photos permission...")        PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in            DispatchQueue.main.async {                authorizationStatus = status                logMessage = "Authorization status after request: \(status.rawValue)"                print(logMessage)                if status == .authorized || status == .limited {                    print("Access granted. Attempting to trigger Photos UI...")                    self.fetchPhotosLibrary()                }            }        }    }    private func fetchPhotosLibrary() {        let fetchOptions = PHFetchOptions()        fetchOptions.fetchLimit = 1        let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)        logMessage = "Fetched \(fetchResult.count) assets from the Photos Library."        print(logMessage)    }}

Sprendimas rodyti programą nuotraukų leidimų skiltyje

Programavimo režimas: „SwiftUI“, „App Sandbox“ konfigūracija

import SwiftUIimport Photos// This script will help in ensuring that the app appears in the Privacy section of System Preferencesstruct PhotosPermissionView: View {    @State private var authorizationStatus: PHAuthorizationStatus = .notDetermined    @State private var logMessage: String = "Waiting for user action..."    var body: some View {        VStack(spacing: 20) {            Text("Photos Permission")                .font(.largeTitle)                .padding()            if authorizationStatus == .authorized || authorizationStatus == .limited {                Text("Access to Photos Library granted!")                    .foregroundColor(.green)                Text(logMessage)                    .font(.caption)                    .foregroundColor(.gray)                Button("Fetch Photos Library") {                    fetchPhotosLibrary()                }                .buttonStyle(.borderedProminent)            } else if authorizationStatus == .denied || authorizationStatus == .restricted {                Text("Access to Photos Library denied.")                    .foregroundColor(.red)                Text("You can enable access in System Preferences.")                    .font(.caption)                    .foregroundColor(.gray)            } else {                Text("Permission to access Photos is not yet determined.")                    .foregroundColor(.orange)                Button("Request Access") {                    requestPhotosPermissionAndTriggerUI()                }                .buttonStyle(.borderedProminent)            }        }        .padding()        .onAppear {            checkPhotosAuthorizationStatus()        }    }    private func checkPhotosAuthorizationStatus() {        authorizationStatus = PHPhotoLibrary.authorizationStatus(for: .readWrite)        logMessage = "Current Photos authorization status: \(authorizationStatus.rawValue)"        print(logMessage)    }    private func requestPhotosPermissionAndTriggerUI() {        print("Requesting Photos permission...")        PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in            DispatchQueue.main.async {                authorizationStatus = status                logMessage = "Authorization status after request: \(status.rawValue)"                print(logMessage)                if status == .authorized || status == .limited {                    print("Access granted. Attempting to trigger Photos UI...")                    self.fetchPhotosLibrary()                }            }        }    }    private func fetchPhotosLibrary() {        let fetchOptions = PHFetchOptions()        fetchOptions.fetchLimit = 1        let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)        logMessage = "Fetched \(fetchResult.count) assets from the Photos Library."        print(logMessage)    }}// Make sure to configure your App's Sandbox settings:func enableAppSandbox() {    // Open your Info.plist file and ensure the following settings are set:    // <key>NSPhotoLibraryUsageDescription</key>    // <string>We need access to your Photos library to display images.</string>    // Enable 'Photos' access in the App Sandbox settings    // Also, ensure that the app is properly signed and sandboxed to request these permissions.}

Nuotraukų leidimų srauto tobulinimas MacOS SwiftUI programose

Dirbant su „MacOS SwiftUI“ programomis itin svarbu tvarkyti vartotojų privatumą ir leidimo užklausas, ypač kai pasiekiama slapta informacija, pvz., nuotraukų biblioteka. Pateiktame pavyzdyje programėlė bando prašyti prieigos prie nuotraukų bibliotekos, bet programa nerodoma Privatumo nustatymų skiltyje System Preferences, o tai neleidžia vartotojui suteikti leidimo. Vienas iš pagrindinių aspektų, galinčių turėti įtakos šiam elgesiui, yra tai, ar programa tinkamai sukonfigūruota smėlio dėžės aplinkoje. Programoms, kurios prašo prieigos prie sistemos išteklių, pvz., nuotraukų bibliotekoje, reikia atitinkamos teisės programos smėlio dėžėje. Turite užtikrinti, kad „Xcode“ programos smėlio dėžės nustatymuose įjungtas žymimasis laukelis „Nuotraukos“. Šis nustatymas leidžia programai prašyti leidimo pasiekti naudotojo nuotraukų biblioteką. Jei tai nenustatyta, programa tyliai suges, o vartotojas sistemos nuostatų skydelyje nematys parinkties suteikti prieigą.

Kitas aspektas, į kurį reikia atsižvelgti, yra naudojimas NSPhotoLibraryUsageDescription įveskite Info.plist failą. Šis raktas reikalingas „Apple“, kad paaiškintų, kodėl programai reikia prieigos prie nuotraukų bibliotekos. Pateiktas aprašas rodomas leidimo dialogo lange, kuris pasirodo, kai programa prašo prieigos. Be šio rakto jūsų programa negalės prašyti prieigos prie nuotraukų bibliotekos, o sistema nepateiks leidimo dialogo lango. Tai yra esminis žingsnis siekiant laikytis „Apple“ privatumo reikalavimų. Būtinai aiškiai apibūdinkite, kodėl programai reikia prieigos, pvz.: „Šiai programai reikalinga prieiga prie nuotraukų bibliotekos, kad būtų lengviau pasirinkti ir redaguoti vaizdus“. To nepadarius, programa gali būti atmesta peržiūros proceso metu arba gali neveikti taip, kaip tikėtasi.

Galiausiai, kita svarbi dalis yra leidimų srauto išbandymas įvairiais scenarijais. Kartais leidimo užklausos nepavyksta dėl anksčiau atmestos užklausos arba dėl kitų sistemos lygio nustatymų. Galite išbandyti, kaip jūsų programa veikia šiose skirtingose ​​būsenose, rankiniu būdu koreguodami nuotraukų leidimo nustatymus sistemos nuostatose. Pavyzdžiui, jei vartotojas jau uždraudė prieigą prie nuotraukų, programėlėje turėtų būti rodomas atitinkamas pranešimas, nurodantis vartotojui, kaip rankiniu būdu įgalinti prieigą per sistemos nustatymus. Be to, apsvarstykite galimybę išbandyti programą naudojant skirtingus privatumo nustatymus, pvz., naudojant švarią vartotojo paskyrą arba iš naujo nustatę programos privatumo leidimus. Tai užtikrina, kad programos srautas būtų nuoseklus skirtinguose įrenginiuose ir konfigūracijose.

Dažnai užduodami klausimai apie nuotraukų leidimus MacOS SwiftUI

  1. Kaip sukonfigūruoti „MacOS“ programą, kad būtų galima pasiekti nuotraukų biblioteką?
  2. Programai reikia „Nuotraukų“ teisės „App Sandbox“ nustatymuose ir NSPhotoLibraryUsageDescription įveskite Info.plist failą, paaiškinantį, kodėl reikalinga prieiga.
  3. Kodėl mano programa nerodoma sistemos nuostatų skiltyje Nuotraukos?
  4. Jei jūsų programa nerodoma, patikrinkite, ar nustatyti tinkami leidimai Info.plist ir kad parinktis „Nuotraukos“ įjungta jūsų programos smėlio dėžės nustatymuose „Xcode“.
  5. Ką daryti, jei programa vis tiek neprašo nuotraukų leidimo?
  6. Įsitikinkite, kad programa turi reikiamas teises ir kad programos kodas tinkamai prašo prieigos naudojant PHPhotoLibrary.requestAuthorization(for:). Be to, įsitikinkite, kad jūsų programa veikia MacOS versijoje, kuri palaiko šias API.
  7. Kaip galiu derinti leidimų problemas „MacOS“ programoje?
  8. Patikrinkite sistemos žurnalus, ar nėra klaidų, susijusių su privatumo leidimais. Be to, rankiniu būdu koreguokite leidimų nustatymus sistemos nuostatose ir patikrinkite programos elgseną su skirtingomis konfigūracijomis, kad pamatytumėte, kaip ji reaguoja į kiekvieną būseną.
  9. Ką daro PHPhotoLibrary.authorizationStatus(for:) metodas?
  10. Šis metodas patikrina dabartinę nuotraukų bibliotekos prieigos būseną ir grąžina tokias reikšmes kaip .authorized, .denied, arba .notDetermined remiantis vartotojo pasirinkimais.
  11. Kodėl yra NSPhotoLibraryUsageDescription reikalingas raktas?
  12. Šis klavišas paaiškina vartotojui, kodėl programai reikia prieigos prie nuotraukų bibliotekos. Be jo, programa neprašys leidimo ir bus atmesta „Apple“ peržiūros procese.
  13. Kas nutiks, jei savo programoje netinkamai tvarkysiu prieigos teisės būsenas?
  14. Jei prieigos būsenos tvarkomos netinkamai, programa gali užstrigti, tinkamai atnaujinti vartotojo sąsają arba rodyti vartotojui klaidinančius pranešimus, todėl naudotojo patirtis bus prasta.
  15. Ar galiu kelis kartus prašyti prieigos prie nuotraukų bibliotekos?
  16. Ne, naudotojui suteikus arba atmetus prieigą, programa nebesuaktyvins užklausos. Turėtumėte rodyti atitinkamus pranešimus, pagrįstus dabartine leidimo būsena.
  17. Kaip galiu apriboti iš nuotraukų bibliotekos gautų išteklių skaičių?
  18. Galite naudoti PHFetchOptions.fetchLimit apriboti grąžinamo turto skaičių PHAsset.fetchAssets(with:options:) metodą, kad jūsų programa taptų efektyvesnė.
  19. Ką daryti, jei programa užstringa bandant gauti išteklių?
  20. Įsitikinkite, kad klaidas elgiatės švelniai – pirmiausia patikrinkite prieigos teisės būseną ir įsitikinkite, kad programa turi tinkamas teises ir leidimus.
  21. Kaip padėti vartotojams rankiniu būdu įgalinti nuotraukų leidimus?
  22. Programoje parodykite pranešimą, kuriame paaiškinama, kaip vartotojas gali įgalinti prieigą per sistemos nuostatas, o tai būtina, jei vartotojas atmetė prieigą.

Nuotraukų leidimų srauto taisymas MacOS SwiftUI programose

Kad jūsų „MacOS SwiftUI“ programa tinkamai prašytų prieigos prie nuotraukų bibliotekos, turite įsitikinti, kad yra kelios svarbios konfigūracijos. Pirma, tavo Info.plist, apima NSPhotoLibraryUsageDescription raktas su aiškiu pranešimu, paaiškinančiu, kodėl reikalinga prieiga. Tai užtikrina, kad vartotojai suprastų programos tikslą prašyti leidimo. Be šio rakto programa negalės rodyti leidimo užklausos dialogo lango. Be to, įsitikinkite, kad programa turi reikiamas teises App Sandbox Xcode nustatymai, konkrečiai įgalinant parinktį „Nuotraukos“, kad būtų prašoma leidimo skaityti ir rašyti nuotraukų bibliotekoje.

Kitas svarbus aspektas yra esamos leidimo būsenos patikrinimas naudojant PHPhotoLibrary.authorizationStatus(for:). Šis metodas grąžina būseną, pvz .įgaliotas, .neigė, arba .nenusiryžęs, kuri padeda nustatyti programos srautą. Kai būsena yra .nenusiryžęs, jūsų programoje turėtų būti pateiktas mygtukas leidimo prašyti. Jei būsena yra .neigė arba .apribota, programa turėtų padėti vartotojui įgalinti prieigą sistemos nuostatose. Kad patirtis būtų sklandi, labai svarbu tinkamai valdyti visas būsenas ir aiškiai bendrauti su vartotoju.

Galiausiai, būtina išbandyti programą naudojant skirtingas leidimų konfigūracijas, siekiant užtikrinti, kad ji veiktų taip, kaip tikėtasi visuose įrenginiuose. Galite išbandyti įvairius scenarijus, pvz., kai vartotojas jau uždraudė prieigą arba kai nuotraukų biblioteka nepasiekiama. Suaktyvindami šias būsenas ir stebėdami, kaip programa reaguoja, užtikrinate, kad programa visada pateiks aiškų grįžtamąjį ryšį, pvz., informuos vartotoją, kad jis aplankytų sistemos nuostatas, kad įgalintų prieigą prie nuotraukų. Šis testavimo procesas yra labai svarbus norint užtikrinti sklandžią naudotojo patirtį įvairiuose privatumo nustatymuose ir įrenginio konfigūracijose. 🖼️

Išvada:

Atlikus anksčiau nurodytus veiksmus ir užtikrinus, kad programa tinkamai sukonfigūruota, ji galės prašyti ir gauti prieigą prie nuotraukų bibliotekos, taip pat bus rodoma sistemos nuostatų privatumo nustatymuose. Tinkamų teisių, konfigūracijos ir aiškaus bendravimo su vartotoju užtikrinimas padės veiksmingai išspręsti leidimų problemas.

Taip pat nepamirškite išbandyti programos įvairiose konfigūracijose, nes skirtingi privatumo nustatymai arba ankstesni leidimai gali turėti įtakos programos veikimui. Šis kruopštus bandymas suteiks naudotojams sklandžią patirtį naudojant jūsų programos nuotraukų integravimą. 📸

Šaltinis ir nuoroda
  1. Išsamią informaciją apie būtiną nuotraukų leidimų konfigūraciją MacOS programose rasite Apple kūrėjų dokumentacijoje. Tai apima būtinus Info.plist raktus ir nuotraukų API tvarkymą. „Apple“ kūrėjų dokumentacija
  2. Norėdami gauti daugiau įžvalgų apie „MacOS“ privatumo nustatymus ir kaip prašyti prieigos prie neskelbtinų duomenų, žr. šį „MacOS“ programų privatumo konfigūravimo vadovą: Programos privatumo apžvalga – Apple Developer