I have a module/framework written in Swift, intended to be used on iOS. When I try to include the framework in my app, I first notice some red \"not found\" hints in the bui
In addition to the above answer which works perfectly on Simulator. On device you will get dyld library not found error and a crash.
Here is the solution for that:
In the project that depends on this framework: Under the build settings: Add a copy files phase and add this framework to the 'Frameworks' folder in copy file phase.
These are slightly modified steps provided by @Mobile Ben
Assume, you have the following Xcode project structure
-YourWorkspace
--YourFramework project
--YourApp project
step 1. Clear all the targets with Cmd+Shift+K
and Cmd+Option+Shift+K
(by choosing each of them in the Scheme selector and pressing the hotkey combination)
step 2. Select YourFramework
project.
step 3. Choose a simulator and build (Cmd+B
) YourFramework
framework target
step 4: Choose Generic iOS Device
and build (Cmd+B
) YourFramework
framework target
step 5: Select YourApp
project. Press +
in Embedded Binaries
and choose the framework under YourFramework project
step 6: now locate the just added framework in Project Navigator (on the left). In File Inspector (on the right) select location Relative to build product
.
NOTE: I believe the step 6 is required b/c of some bug in Xcode. But, though, not selecting Relative to build product
by default might be a deliberate act
UPD#1: Since Xcode 8.0 (8A218a), step 6 is not needed anymore - the IDE sets Relative to Build Products
automatically.
Okay, so I figured out how to work around this. This assumes you have workspace and you have included the framework as a project in the workspace and you are trying to build a product from another project in the workspace which includes the framework.
What you need to do is find out where the framework is being built. It's usually some crazy directory under the DeriveData
directory. Go to the Finder and find it for the configuration you just tried to build.
In the product target's General
settings, under Embedded Binaries
, drag that file into it. This should now place it in the Project Navigator
. You should also see it in the Linked Frameworks and Libraries
which was underneath Embedded Binaries
.
Go to the Project Navigator
and select the file and view it under the File Inspector
. There, change the Location
to Relative to Build Products
.
In the target's Build Settings
, for Framework Search Paths
, add $(BUILT_PRODUCTS_DIR)
and make that recursive. Delete the entry that was automatically added when you added the framework. It will be an explicit path which has the DerivedData path in it.
Do a deep clean and delete the DerivedData
directory for good measure.
Build.
You should now see the framework turn black and it should work properly.