OS X Framework Library not loaded: 'Image not found'
Asked Answered
P

27

309

I am trying to create a basic OS X Framework, right now I just have a test framework created: TestMacFramework.framework and I'm trying to import it into a brand new OS X Application project.

I have built the .framework file and imported it into the new project, The framework appears to link okay, and I can reference the public header file I added to the framework build phases section.

However, when I try to run the container Application I get the following Error:

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

After a bit of googling I realised I needed to add a Copy Files section to my container application build phases, so I have done this and set it up like so...

enter image description here

However, I am still getting the runtime error. I'm obviously doing something wrong here, but the Apple developer library resource for this references Xcode 2, so isn't very helpful!

What have I missed?

UPDATE:

I can see in the build log that my TestMacFramework.framework is being copied into the .app contents/frameworks directory, but it isn't being installed to the Library/Frameworks directory on the HD

enter image description here

UPDATE 2:

The build links correctly if I manually copy the TestMacFramework.framework into the Library/Frameworks directory

Plectrum answered 28/7, 2014 at 10:56 Comment(5)
What does otool -L tell you about where the app expects to find the framework?Jeanninejeans
Okay, I figured out how to run it... This is the output i get for my library (I've excluded the other dependencies, like Foundation, etc) /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)Plectrum
My fix was Embedding as binaries the library I needed (Alamofire). Is this acceptable?Ceporah
It's very confusing that this question is clearly tagged as being for OS X, and all the answers, including the accepted one, are for iOS. I have the same error, and can't use any of the answers.Psi
@Psi Since Xcode 7.3 the process is the same for iOS and macOS frameworks, the accepted answer is the correct way to do it. If you're still having problems, it might be an unrelated issue?Plectrum
A
601

[Xcode 11+]

The only thing to do is to add the framework to the General->Frameworks, Libraries And Embedded Content section in the General tab of your app target.

Make sure you select the 'Embed & Sign' option.

enter image description here

[Xcode v6 -> Xcode v10]

The only thing to do is to add the framework to the Embedded binaries section in the General tab of your app target.

Screenshot from Xcode

Antwanantwerp answered 22/6, 2015 at 11:41 Comment(10)
This is the only step necessary for iOS.Naturopathy
I use a class from my imported framework in Storyboard and was having this error. Just wanted to add on that in addition to setting the Custom CLASS in Storyboard, you also have to set the MODULE field.Exceptive
XCode 7.3 and iOS Simulator iPhone6s Plus and this still fix this issue. Great!Albi
I am still getting the same error even after doing itDunnage
I lost a whole day thanks to this, was messing around with a lot of settings. Thank goodness it's this simple. Upvoted.Flight
If your framework uses another framework, you should add both of them to your application's linked framework and embedded binariesOchoa
Still worked for us on Xcode 9, to embed the Turbolinks framework.Ferrell
@ZevsVU I don't have Embedded binaries section in my macOS project. What's wrong?Chinua
great answer. xcode 10.1 use this answer sucess to run the app.Priscella
UPDATE, change to Embed & Sign your framework in Frameworks, Libraries, and Embedded ContentStalnaker
P
58

So I managed to get it working, it's quite simple when you have the right instructions. What I was looking for was a 'private' framework which lives in the App bundle rather than being written to the system library folder.

Building The Framework

  1. Add a target to create a Cocoa Framework
  2. Within that targets 'Build Settings' configure the 'Installation Directory' to '@executable_path/../Frameworks'
  3. Build library, and access the .framework from the archive or products directory

Including The Framework

  1. Drag the created .framework file into the Xcode Project, be sure to tick 'Copy Files to Directory'
  2. In the containing applications target, add a new 'Copy File Build Phase'
  3. Set the 'Destination' to 'Frameworks'
  4. Drag in the created .framework
Plectrum answered 31/7, 2014 at 13:9 Comment(5)
This also works for iOS frameworks. When adding the custom framework into the workspace to build along with it. You have to add the Including The Framework part of this solution to solve this error when debugging on device!Abubekr
Thanks, worked for iOS. I didnt follow your first steps as the frameworks were already built in my derived data folderOrnithopod
Awesome! Saved my freakin day! 2017 - Xcode 8.3.2 Thanks!Allantoid
For some odd reason you can't drag the framework from the default "Link Binary with Libraries" section to the "Embedded Frameworks" section but you can drag the framework from the Projects listing at the left. You will still have to manually delete the framework from the "Link Binary With Libraries" section with the "-" button.Acquaintance
What do you mean by a "Private Framework" ? I have created a framework similar to yours, could you tell me how to identify if mine is a Private Framework?Roaster
K
18

It was quite simple for me, i just added my framework to my embedded binaries under app targets

Kerbing answered 28/5, 2015 at 15:8 Comment(0)
L
18

The options above where not possible for me to include. I solved it by specifying the Runpath Search Path

This is on the 'Build Settings' tab. In the 'Linking' section. Change 'Runpath Search Paths' into $(inherited) @executable_path/Frameworks

Lacilacie answered 17/5, 2016 at 12:13 Comment(3)
I needed both steps, this step and to add a new 'Copy File Build Phase' with the framework before.Prefecture
I had an old Xcode project that's been incrementally updated and these settings were missing for me. Added and now working as expected.Lydia
out of all these solutions this one worked, it is so annoying how the approach to the problem is like "okay let me go down the list of all these stackoverflow posts, since the root cause is unclear" APPLEEEEECrucifer
D
13

I ran into the same issue but the accepted solution did not work for me. Instead the solution was to modify the framework's install name.

The error in the original post 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

Note the first path after Library not loaded. The framework is being loaded from an absolute path. This path comes from the framework's install name (sometimes called rpath), which can be examined using:

otool -D MyFramework.framework/MyFramework

When a framework is embedded into an app this path should be relative and of this form: @rpath/MyFramework.framework/MyFramework. If your framework's install name is an absolute path it may not be loaded at runtime and an error similar to the one above will be produced.

The solution is to modify the install name:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

With this change I no longer get the error

Dougdougal answered 28/6, 2017 at 7:56 Comment(1)
This is a great answer! Moving a framework/dylib file around doesn't change its original path. The steps here are required in combination with those in the accepted answer.Him
T
9

Deleting derived data saved it for me

Toback answered 3/9, 2015 at 15:52 Comment(1)
Didn't work for me, however when I did a pod install it worked.Infringe
S
9

None of these issues solved this for me. The problem in the end was pretty easy. It looks like its a pretty major Xcode bug which I have logged the problem and fix under Apple bug: 29820370. If you are struggling (as it seems like there are several pages of problems similar to this ) then it would be great if you can raise a bug on bug reporter: https://bugreport.apple.com/ and reference the bug I raised to gain visibility. I want to make Xcode back into the pleasure that it was before - and this is something I am sure Xcode should have fixed itself.

Here is the fix: 1. Open Keychain - go to Apple Worldwide Developer Cert. 2. Double Click on it 3. Change the permission level from "always trust" to use System Defaults 4. Save and close it 5. Restart Xcode, Clean and build your project and it should be gone.

Screenshot below of the correct settings: Keychain access fixed Hope this helps!

Steelworks answered 30/12, 2016 at 19:1 Comment(4)
"Use Systems Defaults" seems to be the standard setting.Kwan
Not always - something seems to change it which results in that errrorSteelworks
Thanks this fixed my problem as well! Unfortunately I cannot see your ticket on the bug tracker to give additional visibility to it. I'm not sure why, it doesn't show any bugs there though.Jarlen
Thanks, this was the problem. I have 2 of these certs, one that expires shortly after the other. At first I changed the wrong one. Now they are both set and the problem is gone.Oldwife
A
9

When you drag a custom framework into a project under Xcode 10.1, it assumes that the framework is a system framework and puts the framework into "Link Binary With Libraries" section of "Build Phases" under your target.

System frameworks are already on the device so it is not copied over to the device and thus cannot execute at runtime so KABOOM (crash in __abort_with_payload, and disinforming error: "Reason: image not found"). This is because the framework code is not copied to the device...

In reality, to have Xcode both link the custom framework and ensure that it is copied along with your code to the iOS device (real or simulator) the custom framework needs to be moved to "Copy Bundle Resources". This ultimately packages the framework along with your code executable to be available on the device together.

To add a custom framework to a project and avoid the Apple crash:

  1. Drag custom framework into your iOS project file list
  2. Click ProjectName in Navigator -> TargetName -> "Build Phases" -> Link Binary With Libraries disclosure triangle
  3. Drag custom framework out and down to "Copy Bundle Resources" section below (Xcode now moves the framework reference, fixed in Xcode 10)
  4. Run in simulator or device

The custom framework thus gets copied along with your code to your target device and is available at runtime.

enter image description here

[editorial: you would think Xcode would be smart enough to figure out the difference between one of it's system frameworks which need not be copied to the device and a custom framework that is, oh I don't know, in the project root directory hierarchy... 🙄]

Acquaintance answered 16/3, 2019 at 12:2 Comment(0)
S
7

Xcode 11 :

in Xcode 11 add framework into General->Frameworks, Libraries And Embedded Content

after adding make sure you select Embed & Sign option

enter image description here

Smoothbore answered 4/10, 2019 at 5:19 Comment(7)
if you do this then you will not able to upload your app on app storeLiana
@Mahendra, what is the alternative you use in this case? I had a similar issue.Derek
@DerrylThomas, The app is still in development mode so didn't test this caseLiana
@Mahendra, please share here in case you find an alternative for this. I'd be very grateful.Derek
@DerrylThomas While creating archive, restore back to , Do Not Embed option and create executable to upload to app store.Veilleux
@DerrylThomas Everytime changing back to Do Not Embed while archiving could be only a temporary workaround. Did you find any permanent solution? It would be very helpful.Chasteen
@Liana Did you find any solution?Chasteen
P
5

There should be a 'Run Script' into 'Build Phases' with this: '/usr/local/bin/carthage copy-frameworks'

On the 'Input Files' of that 'Run Script', you should add the path to your libraries. Like this:

Build Phases Run Script

Primordium answered 9/9, 2016 at 0:53 Comment(0)
P
4

If you accidentally reset your keychain, this can occur due to missing Apple certificates in the keychain. I followed this to solve my problem.

I had the same issue and was able to fix by re-downloading the WWDR (Apple Worldwide Developer Relations Certification Authority). Download from here: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

Puppis answered 22/10, 2015 at 3:9 Comment(1)
This solved my problem as well. Remember to clean build folder before recompiling.Carotid
S
4

If you are using Xcode 11, ensure that you have the framework added in Frameworks, Libraries, and Embed Content under Target settings - General. Change Embed status from - 'Do not Embed' to 'Embed & Sign'

Seersucker answered 9/8, 2019 at 7:21 Comment(1)
But this will give ITMS-90206 Invalid Swift Support error when you distribute to App Store. It only works in Development.Rauscher
A
4

I faced this issue with Xcode 13 betas with the UniformTypeIdentifiers.framework. The app failed to run on iOS versions lower than 13. The below approach fixed the issue :

Go to the target -> Build Phases -> Link Binary With Libraries -> Add the framework -> Add the status as "Optional" Adding the problematic framework The above worked perfectly for me! Hope this helps!

Aldred answered 7/9, 2021 at 16:30 Comment(0)
H
2

What solved it for me was changing abstract_target to target for the main target in my Podfile. I had previously set it to abstract_target and this caused the described error. Now it works like a charm

Hartzel answered 13/2, 2019 at 10:38 Comment(0)
P
1

For Xcode 8, some stale products will be removed from derived data folder refer to this solution.

Apple: In macOS 10.12 and later, Xcode cleans up stale derived data, precompiled headers, and module caches. (23282174)

The Xcode build system supports stale file removal of some types of build artifacts that were produced in a previous build, but have since been removed from the project.

Base on the author's thought, I found this build log from my 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

After creating a new copy file phase and copy the target stale framework to Frameworks destination, the above removal log disappears after rebuilding.

Just clarify my situation and reason, hope it's helpful for someone.

Pestiferous answered 14/6, 2017 at 14:53 Comment(0)
L
1

For me this was the solution, after many hours of searching!!

For some reason, well into the development of a Swift 2.3 custom Framework, Xcode 8 had removed the DYLIB_INSTALL_NAME_BASE setting from the project.pbxproj file. A little walk into the Build Settings / Dynamic Library Install Name Base setting back to @rpath fixed it.

(from https://forums.developer.apple.com/thread/4687)

Lumpfish answered 30/11, 2017 at 13:8 Comment(0)
K
1

This might happen with Pod Frameworks. I was facing the same issue with AnswerBotProvidersSDK.framework and my mistake was, I set Run Script checked for Install builds only in targets build phases.

Incorrect settings:

enter image description here

Correct Settings:

enter image description here

Koosis answered 26/10, 2020 at 2:44 Comment(0)
M
0

I found that this issue was related only to the code signing and certificates not the code itself. To verify this, create the basic single view app and try to run it without any changes to your device. If you see the same error type this shows your code is fine. Like me you will find that your certificates are invalid. Download all again and fix any expired ones. Then when you get the basic app to not report the error try your app again after exiting Xcode and perhaps restarting your mac for good measure. That finally put this nightmare to an end. Most likely this has nothing to do with your code especially if you get Build Successful message when you try to run it. FYI

Mastectomy answered 11/5, 2017 at 15:49 Comment(0)
A
0

Got the issue when trying Xcode 9 beta and going back to Xcode 8. A simple Clean on the target resolved the issue.

Adjourn answered 7/6, 2017 at 12:11 Comment(0)
J
0

I had the same issue for a different reason. I've created a new configuration to Debug and Release (under PROJECT -> Info tab -> Configuration). And I had to change my pod frameworks shell script (Pods-"appName"-frameworks.sh , under Targets Support Files) to make it work.

[Xcode 9]

Jagged answered 15/11, 2017 at 12:22 Comment(0)
D
0

The only thing that worked for me:

Target > Build Phases > [CP] Embed Pods Frameworks Uncheck "Show environment variables in build log" and "Run script only when installing"

Dressmaker answered 22/12, 2017 at 20:19 Comment(0)
P
0

I tried many fixes, but what worked for me was to delete a missing target listed in the build tab of the build scheme. You can get to it by opening the edit window of the current scheme.

Edit: My UI testing target was not working as well, and the solution I found was to delete it and generate it again.

Prospector answered 16/5, 2018 at 23:0 Comment(0)
V
0

open xcode -> general -> Embedded Binaries -> add QBImagepicker.framework and RSKImageCropper -> clean project

just add QBImagePicker.framework and RSKImageCropper.framework at embedded binaries worked for me

Vulgus answered 30/5, 2018 at 8:15 Comment(0)
V
0

I think there is no fixed way to solve this problem since it might be caused by different reason. I also had this problem last week, I don't know when and exactly what cause this problem, only when I run it on simulator with Xcode or try to install it onto the phone, then it reports such kind of error, But when I run it with react-native run-ios with terminal, there is no problem.

I checked all the ways posted on the internet, like renew certificate, change settings in Xcode (all of ways mentions above), actually all of settings in Xcode were already set as it requested before, none of ways works for me. Until this morning when I delete the pods and reinstall, the error finally gonna after a week. If you are also using cocoapod and then error was just show up without any specific reason, maybe you can try my way.

  1. Check my cocoapods version.
  2. Update it if there is new version available.
  3. Go to your project folder, delete your Podfile.lock , Pods file, project xcworkspace.
  4. Run pod install
Venlo answered 20/5, 2019 at 9:40 Comment(0)
A
0

I experienced that problem only when running on real device (iPhone SE). On simulator project worked as expected.

I did try all fixes from this very thread and from here. None of those worked for me.

For me problem was solved after restarting iPhone (sic!).

I did:

  • clean build folder,
  • clean derived data,
  • delete app from device,
  • reboot device

And it finally works. :)

If every other solution fails don't forget to try it out.

Achelous answered 12/2, 2020 at 10:52 Comment(2)
Reboot the device, turn off the lights, exit the room, go to the toilet and come back... this is how problems are solved on iOS. LOL. Tried the above solution and it didn't work for me.Barbiturism
I think you could forgot to hold your breath during all that process. As far as I remember it was really helping when loading programs on Atari 65 XE.Achelous
N
0

Xcode 11 : Build Phases -> Embed Frameworks

enter image description here

Nitid answered 12/3, 2020 at 13:1 Comment(0)
P
0

For me for some reason xCode (12.5 up to this moment) decided that my Notification Service Extension Target should not have correct paths to frameworks. I suspect that this is happened after I've updated from xCode 12.1 to 12.5.

So I was getting the same error related to one of my internal frameworks. To fix this problem do the following:

  1. go to Project's General Tab

  2. Select your target (in my case it was Notification Service Extension Target)

  3. Make sure that Framework and Libraries section contains your missing framework. I've left it Embed Without Signing in my NSE Target, but it is also was added with Embed & Sign to my primary app target

  4. Keep your target selected and switch to Build Settings tab

  5. There in a search bar enter LD_RUNPATH_SEARCH_PATHS (make sure that All possible settings will be displayed and not just Basic)

  6. You will see Runpath Search Paths and it was empty for me.

  7. Add 3 following values there:

    • $(inherited)
    • @executable_path/Frameworks
    • @executable_path/../../Frameworks

This is what helped me.

Photophore answered 16/6, 2021 at 20:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.