Ik probeer een basis OS X-framework te maken, op dit moment heb ik alleen een testframework gemaakt: TestMacFramework.framework
en ik probeer het te importeren in een gloednieuw OS X-toepassingsproject .
Ik heb het .framework-bestand gebouwd en geïmporteerd in het nieuwe project. Het framework lijkt goed te linken, en ik kan verwijzen naar het openbare headerbestand dat ik heb toegevoegd aan het gedeelte met de bouwfasen van het framework.
Als ik echter de containertoepassing probeer uit te voeren, krijg ik de volgende foutmelding:
dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
Reason: image not found
Na wat googlen realiseerde ik me dat ik een sectie Copy Files
moest toevoegen aan de bouwfasen van mijn containertoepassing, dus ik heb dit gedaan en het zo ingesteld…
Ik krijg echter nog steeds de runtime-fout. Ik doe hier duidelijk iets verkeerd, maar de bibliotheekbron voor Apple-ontwikkelaars hiervoor verwijst naar Xcode 2, dus is niet erg nuttig!
Wat heb ik gemist?
UPDATE:
Ik kan in het buildlogboek zien dat mijn TestMacFramework.framework
wordt gekopieerd naar de map .app content/frameworks, maar niet wordt geïnstalleerd naar de map Library/Frameworks op de HD
UPDATE 2:
De build linkt correct als ik de TestMacFramework.framework
handmatig kopieer naar de Library/Frameworks
directory
Antwoord 1, autoriteit 100%
[Xcode 11+]
Het enige wat u hoeft te doen is het framework toe te voegen aan de sectie General->Frameworks, Libraries And Embedded Content
op het tabblad General
van uw app-doel.
Zorg ervoor dat u de optie ‘Embed & Teken’ optie.
[Xcode v6 -> Xcode v10]
Het enige wat u hoeft te doen is het framework toe te voegen aan het gedeelte Embedded binaries
op het tabblad General
van uw app-doel.
Antwoord 2, autoriteit 10%
Dus het is me gelukt om het werkend te krijgen, het is vrij eenvoudig als je de juiste instructies hebt. Waar ik naar op zoek was, was een ‘privé’-framework dat in de app-bundel leeft in plaats van naar de systeembibliotheekmap te worden geschreven.
Het raamwerk bouwen
- Voeg een doel toe om een Cocoa Framework te maken
- Binnen die doelen configureert u ‘Build Settings’ de ‘Installation Directory’ naar ‘@executable_path/../Frameworks’
- Bouw een bibliotheek en open het .framework vanuit de archief- of productdirectory
Inclusief het raamwerk
- Sleep het gemaakte .framework-bestand naar het Xcode-project, vink ‘Bestanden naar map kopiëren’ aan
- Voeg in het bevattende applicatiedoel een nieuwe ‘Copy File Build Phase’ toe
- Stel de ‘Bestemming’ in op ‘Frameworks’
- Sleep het gemaakte .framework in
Antwoord 3, autoriteit 3%
Het was vrij eenvoudig voor mij, ik heb zojuist mijn raamwerk toegevoegd aan mijn ingesloten binaire bestanden onder app-doelen
Antwoord 4, autoriteit 3%
De bovenstaande opties waren voor mij niet mogelijk om op te nemen.
Ik heb het opgelost door het Runpath-zoekpad op te geven
Dit staat op het tabblad ‘Build-instellingen‘.
In het gedeelte ‘Linken‘.
Wijzig ‘Runpath-zoekpaden‘ in $(inherited) @executable_path/Frameworks
Antwoord 5, autoriteit 2%
Ik kwam hetzelfde probleem tegen, maar de geaccepteerde oplossing werkte niet voor mij. In plaats daarvan was de oplossing om de installatienaam van het framework te wijzigen.
De fout in het oorspronkelijke bericht is:
dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
Reason: image not found
Let op het eerste pad na Bibliotheek niet geladen. Het framework wordt geladen vanaf een absoluut pad. Dit pad komt van de installatienaam van het framework (soms rpath genoemd), die kan worden onderzocht met:
otool -D MyFramework.framework/MyFramework
Als een framework in een app is ingesloten, moet dit pad relatief zijn en de volgende vorm hebben: @rpath/MyFramework.framework/MyFramework. Als de installatienaam van uw framework een absoluut pad is, wordt het mogelijk niet geladen tijdens runtime en zal er een fout optreden die vergelijkbaar is met die hierboven.
De oplossing is om de installatienaam te wijzigen:
install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework
Met deze wijziging krijg ik de foutmelding niet meer
Antwoord 6, autoriteit 2%
Het verwijderen van afgeleide gegevens heeft het voor mij opgeslagen
Antwoord 7
Geen van deze problemen heeft dit voor mij opgelost. Het probleem was uiteindelijk vrij eenvoudig. Het lijkt erop dat het een behoorlijk grote Xcode-bug is die ik heb geregistreerd en opgelost onder Apple-bug: 29820370. Als je worstelt (omdat het lijkt alsof er verschillende pagina’s met soortgelijke problemen zijn), zou het geweldig zijn als je kunt meld een bug op bugreporter: https://bugreport.apple.com/en verwijs naar de bug die ik heb gemeld zichtbaarheid krijgen. Ik wil van Xcode weer het plezier maken dat het voorheen was – en dit is iets waarvan ik zeker weet dat Xcode zichzelf had moeten herstellen.
Hier is de oplossing:
1. Open Sleutelhanger – ga naar Apple Worldwide Developer Cert.
2. Dubbelklik erop
3. Wijzig het machtigingsniveau van “altijd vertrouwen” om Systeemstandaarden te gebruiken
4. Opslaan en sluiten
5. Start Xcode opnieuw, reinig en bouw uw project en het zou weg moeten zijn.
Screenshot hieronder van de juiste instellingen:
Ik hoop dat dit helpt!
Antwoord 8
Wanneer u een aangepast framework naar een project sleept onder Xcode 10.1, aangenomendat het framework een systeemframework is en het framework in “Link Binary With Libraries” plaatst sectie van “Bouwfasen” onder je doelwit.
Systeemframeworks staan al op het apparaat, dus het wordt niet naar het apparaat gekopieerd en kan dus niet tijdens runtime worden uitgevoerd, dus KABOOM(crash in __abort_with_payload en desinformerende fout: “Reden: afbeelding niet gevonden” ). Dit komt omdat de framework-code niet naar het apparaat wordt gekopieerd…
In werkelijkheid, om Xcode zowel het aangepaste raamwerk te laten koppelen als ervoor te zorgen dat het samen met uw code naar het iOS-apparaat (echt of simulator) wordt gekopieerd, moet het aangepaste raamwerk worden verplaatst naar “Bundelbronnen kopiëren”. Dit verpakt uiteindelijk het framework samen met uw uitvoerbare code om samen op het apparaat beschikbaar te zijn.
Een aangepast raamwerk aan een project toevoegen en de Apple-crash voorkomen:
- Sleep een aangepast raamwerk naar de lijst met iOS-projectbestanden
- Klik op Projectnaam in Navigator -> Doelnaam -> “Bouwfasen” ->
Binaire koppeling met bibliotheken onthullingsdriehoek - Sleep het aangepaste framework uit en omlaag naar het gedeelte ‘Bundelbronnen kopiëren’ hieronder (Xcode verplaatst nude frameworkreferentie, opgelost in Xcode 10)
- Uitvoeren in simulator of apparaat
Het aangepaste framework wordt dus samen met uw code naar uw doelapparaat gekopieerd en is tijdens runtime beschikbaar.
[redactioneel: je zou denkendat Xcode slim genoeg zou zijn om het verschil te ontdekken tussen een van zijn systeemframeworks die niet naar het apparaat hoeven te worden gekopieerd en een aangepast framework dat wil zeggen, oh ik weet het niet weet niet, in de hiërarchie van de hoofdmap van het project… 🙄]
Antwoord 9
Xcode 11 :
voeg in Xcode 11 een raamwerk toe aan General->Frameworks, Libraries And Embedded Content
zorg ervoor dat u na het toevoegen Embed & Sign
optie
Antwoord 10
Er moet een ‘run script’ zijn in ‘Build fasen’ hiermee: ‘/ usr / local / bin / Carthage Copy-frameworks’
Op de ‘invoerbestanden’ van dat ‘Run Script’ moet u het pad aan uw bibliotheken toevoegen. Zoals dit:
Antwoord 11
Als u per ongeluk uw sleutelhanger reset, kan dit optreden als gevolg van ontbrekende Apple-certificaten in de sleutelhanger. Ik volgde dit om mijn probleem op te lossen.
Ik had hetzelfde probleem en was in staat om te repareren door het opnieuw te downloaden van de WWDR (Apple Worldwide Developer Relations Certification Authority).
Download vanaf hier: http://developer.apple.com/certificationAuthority/applewwwdrca.cer
Antwoord 12
Als u Xcode 11 gebruikt, zorg er dan voor dat u het kader hebt toegevoegd in frameworks, bibliotheken en inhoud in de inhoud onder de doelinstellingen – Algemeen. Wijzig de insluiten Status van – ‘Niet insluiten’ naar ’embed & amp; Teken ‘
Antwoord 13
Wat is het opgelost voor mij was het wijzigen van abstract_target
naar target
voor het hoofddoel in mijn podfile. Ik had het eerder ingesteld op abstract_target
en dit veroorzaakte de beschreven fout. Nu werkt het als een charme
Antwoord 14
Voor Xcode 8 worden sommige muffe producten uit de afgeleide gegevensmap verwijzen, raadpleeg deze oplossing .
Op basis van de gedachte van de auteur vond ik dit buildlog van mijn case.
Remove stale build products
/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks
Na het maken van een nieuwe fase voor het kopiëren van het bestand en het kopiëren van het verouderde-doelkader naar de bestemming Frameworks, verdwijnt het bovenstaande verwijderingslogboek na het opnieuw opbouwen.
Verduidelijk mijn situatie en reden, ik hoop dat iemand er iets aan heeft.
Antwoord 15
Voor mij was dit de oplossing, na vele uren zoeken!!
Om de een of andere reden had Xcode 8, ver in de ontwikkeling van een Swift 2.3 custom Framework, de instelling DYLIB_INSTALL_NAME_BASE
verwijderd uit het bestand project.pbxproj
. Een kleine wandeling naar de instelling Build Settings / Dynamic Library Install Name Base
terug naar @rpath
heeft het opgelost.
(van https://forums.developer.apple.com/thread/4687)
Antwoord 16
Ik ontdekte dat dit probleem alleen te maken had met het ondertekenen van de code en met de certificaten, niet met de code zelf. Om dit te verifiëren, maakt u de basis-app voor één weergave en probeert u deze uit te voeren zonder wijzigingen aan uw apparaat. Als u hetzelfde fouttype ziet, geeft dit aan dat uw code in orde is. Net als ik zul je merken dat je certificaten ongeldig zijn. Download alles opnieuw en herstel eventuele verlopen. Wanneer u vervolgens de basis-app krijgt om de fout niet te melden, probeert u uw app opnieuw nadat u Xcode hebt afgesloten en misschien uw mac voor de goede orde opnieuw hebt opgestart. Dat maakte eindelijk een einde aan deze nachtmerrie. Hoogstwaarschijnlijk heeft dit niets te maken met uw code, vooral als u het bericht Build Succesvol krijgt wanneer u het probeert uit te voeren. Ter info
Antwoord 17
Kreeg het probleem bij het proberen van Xcode 9 beta en teruggaan naar Xcode 8. Een simpele Clean op het doel loste het probleem op.
Antwoord 18
Ik had hetzelfde probleem om een andere reden.
Ik heb een nieuwe configuratie gemaakt voor Debug and Release (onder PROJECT -> Info tab -> Configuration).
En ik moest het shellscript van mijn pod frameworks (Pods-“appName”-frameworks.sh , onder Targets Support Files) wijzigen om het te laten werken.
[Xcode 9]
Antwoord 19
Het enige dat voor mij werkte:
Doel > Bouwfasen > [CP] Pods-frameworks insluiten
Schakel “Toon omgevingsvariabelen in buildlog” en “Script alleen uitvoeren tijdens installatie” uit
Antwoord 20
Ik heb veel oplossingen geprobeerd, maar wat voor mij werkte, was het verwijderen van een ontbrekend doel dat op het tabblad Bouwen van het bouwschema staat. U kunt er komen door het bewerkingsvenster van het huidige schema te openen.
Bewerken: mijn UI-testdoel werkte niet zo goed, en de oplossing die ik vond was om het te verwijderen en opnieuw te genereren.
Antwoord 21
open xcode -> algemeen -> Ingesloten binaire bestanden -> voeg QBImagepicker.framework en RSKImageCropper -> schoon project
voeg gewoon QBImagePicker.framework en RSKImageCropper.framework toe aan embedded binaries die voor mij werkten
Antwoord 22
Ik denk dat er geen vaste manier is om dit probleem op te lossen, omdat het om een andere reden kan worden veroorzaakt. Ik had vorige week ook dit probleem, ik weet niet wanneer en wat dit probleem precies veroorzaakt, alleen als ik het op een simulator met Xcode uitvoer of probeer het op de telefoon te installeren, dan meldt het zo’n soort fout, maar wanneer ik voer het uit met react-native run-ios met terminal, er is geen probleem.
Ik heb alle manieren gecontroleerd die op internet zijn gepost, zoals certificaat vernieuwen, instellingen wijzigen in Xcode (alle hierboven genoemde manieren), eigenlijk waren alle instellingen in Xcode al ingesteld zoals eerder gevraagd, geen enkele manier werkt voor mij. Tot vanmorgen, toen ik de pods verwijder en opnieuw installeer, de fout eindelijk na een week. Als je ook cacaopod gebruikt en er is een fout opgetreden zonder een specifieke reden, kun je het misschien op mijn manier proberen.
- Controleer mijn cacaopods-versie.
- Update het als er een nieuwe versie beschikbaar is.
- Ga naar je projectmap, verwijder je Podfile.lock, Pods-bestand, project xcworkspace.
- Podinstallatie uitvoeren
Antwoord 23
Ik ondervond dat probleem alleen bij gebruik op een echt apparaat (iPhone SE). Op simulatorproject werkte zoals verwacht.
Ik heb alle oplossingen van deze thread en van hier.
Geen van deze werkte voor mij.
Voor mij was het probleem opgelost na het herstarten van de iPhone (sic!).
Ik deed:
- schone buildmap,
- schone afgeleide gegevens,
- app van apparaat verwijderen,
- apparaat opnieuw opstarten
En het werkt eindelijk. 🙂
Als elke andere oplossing faalt, vergeet dan niet om het uit te proberen.
Antwoord 24
Xcode 11 :
Bouwfasen -> Kaders insluiten
Antwoord 25
Dit kan gebeuren met Pod Frameworks
.
Ik had hetzelfde probleem met AnswerBotProvidersSDK.framework
en mijn fout was dat ik Script uitvoerenhad ingesteld op Alleen builds installerenin de bouwfasen van doelen.
Onjuiste instellingen:
Correcte instellingen:
Antwoord 26
Om de een of andere reden heeft xCode (12.5 tot nu toe) besloten dat mijn Notification Service Extension Target geen correcte paden naar frameworks zou moeten hebben. Ik vermoed dat dit is gebeurd nadat ik heb bijgewerkt van xCode 12.1 naar 12.5.
Dus ik kreeg dezelfde fout met betrekking tot een van mijn interne frameworks. Ga als volgt te werk om dit probleem op te lossen:
-
ga naar het tabblad
General
van Project -
Selecteer uw doel (in mijn geval was het Notification Service Extension Target)
-
Zorg ervoor dat de sectie
Framework and Libraries
uw ontbrekende framework bevat. Ik heb hetEmbed Without Signing
in mijn NSE Target gelaten, maar het is ook toegevoegd metEmbed & Sign
bij mijn primaire app-doel -
Houd uw doelwit geselecteerd en schakel over naar
Build Settings
Tab -
Daar in een zoekbalk Invoeren
LD_RUNPATH_SEARCH_PATHS
(zorg ervoor datAll
mogelijke instellingen worden weergegeven en niet alleenBasic
) -
U ziet
Runpath Search Paths
en het was leeg voor mij. -
Voeg 3 volgende waarden toe:
- $ (geërfd)
- @ uitvoerbare_path / frameworks
- @Execable_Path /../../ Frameworks
Dit is wat me heeft geholpen.