OS X Framework-bibliotheek niet geladen: ‘Afbeelding niet gevonden’

Ik probeer een basis OS X-framework te maken, op dit moment heb ik alleen een testframework gemaakt: TestMacFramework.frameworken 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 Filesmoest 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.frameworkwordt 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.frameworkhandmatig kopieer naar de Library/Frameworksdirectory


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 Contentop het tabblad Generalvan 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 binariesop het tabblad Generalvan 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

  1. Voeg een doel toe om een Cocoa Framework te maken
  2. Binnen die doelen configureert u ‘Build Settings’ de ‘Installation Directory’ naar ‘@executable_path/../Frameworks’
  3. Bouw een bibliotheek en open het .framework vanuit de archief- of productdirectory

Inclusief het raamwerk

  1. Sleep het gemaakte .framework-bestand naar het Xcode-project, vink ‘Bestanden naar map kopiëren’ aan
  2. Voeg in het bevattende applicatiedoel een nieuwe ‘Copy File Build Phase’ toe
  3. Stel de ‘Bestemming’ in op ‘Frameworks’
  4. 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:

  1. Sleep een aangepast raamwerk naar de lijst met iOS-projectbestanden
  2. Klik op Projectnaam in Navigator -> Doelnaam -> “Bouwfasen” ->
    Binaire koppeling met bibliotheken onthullingsdriehoek
  3. Sleep het aangepaste framework uit en omlaag naar het gedeelte ‘Bundelbronnen kopiëren’ hieronder (Xcode verplaatst nude frameworkreferentie, opgelost in Xcode 10)
  4. 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 & Signoptie


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_targetnaar targetvoor het hoofddoel in mijn podfile. Ik had het eerder ingesteld op abstract_targeten 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 .

Apple: In macOS 10.12 en hoger ruimt Xcode verouderde afgeleide gegevens, voorgecompileerde headers en modulecaches op. (23282174)

Het Xcode-buildsysteem ondersteunt het verwijderen van verouderde bestanden van sommige typen buildartefacten die in een eerdere build zijn geproduceerd, maar sindsdien uit het project zijn verwijderd.

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_BASEverwijderd uit het bestand project.pbxproj. Een kleine wandeling naar de instelling Build Settings / Dynamic Library Install Name Baseterug naar @rpathheeft 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.

  1. Controleer mijn cacaopods-versie.
  2. Update het als er een nieuwe versie beschikbaar is.
  3. Ga naar je projectmap, verwijder je Podfile.lock, Pods-bestand, project xcworkspace.
  4. 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.frameworken 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:

  1. ga naar het tabblad Generalvan Project

  2. Selecteer uw doel (in mijn geval was het Notification Service Extension Target)

  3. Zorg ervoor dat de sectie Framework and Librariesuw ontbrekende framework bevat. Ik heb het Embed Without Signingin mijn NSE Target gelaten, maar het is ook toegevoegd met Embed & Signbij mijn primaire app-doel

  4. Houd uw doelwit geselecteerd en schakel over naar Build SettingsTab

  5. Daar in een zoekbalk Invoeren LD_RUNPATH_SEARCH_PATHS(zorg ervoor dat Allmogelijke instellingen worden weergegeven en niet alleen Basic)

  6. U ziet Runpath Search Pathsen het was leeg voor mij.

  7. Voeg 3 volgende waarden toe:

    • $ (geërfd)
    • @ uitvoerbare_path / frameworks
    • @Execable_Path /../../ Frameworks

Dit is wat me heeft geholpen.

Other episodes