How do you add GPUImage to an iOS project?

13,516

Solution 1

I don't know how I could be much clearer than the step-by-step instructions I put on the very first page of the GitHub project and in the README.md under the section "Adding the framework to your iOS project":

Once you have the latest source code for the framework, it's fairly straightforward to add it to your application. Start by dragging the GPUImage.xcodeproj file into your application's Xcode project to embed the framework in your project. Next, go to your application's target and add GPUImage as a Target Dependency. Finally, you'll want to drag the libGPUImage.a library from the GPUImage framework's Products folder to the Link Binary With Libraries build phase in your application's target.

GPUImage needs a few other frameworks to be linked into your application, so you'll need to add the following as linked libraries in your application target:

  • CoreMedia
  • CoreVideo
  • OpenGLES
  • AVFoundation
  • QuartzCore

You'll also need to find the framework headers, so within your project's build settings set the Header Search Paths to the relative path from your application to the framework/ subdirectory within the GPUImage source directory. Make this header search path recursive.

To use the GPUImage classes within your application, simply include the core framework header using the following:

#import "GPUImage.h"

As a note: if you run into the error "Unknown class GPUImageView in Interface Builder" or the like when trying to build an interface with Interface Builder, you may need to add -ObjC to your Other Linker Flags in your project's build settings.

Also, if you need to deploy this to iOS 4.x, it appears that the current version of Xcode (4.3) requires that you weak-link the Core Video framework in your final application or you see crashes with the message "Symbol not found: _CVOpenGLESTextureCacheCreate" when you create an archive for upload to the App Store or for ad hoc distribution. To do this, go to your project's Build Phases tab, expand the Link Binary With Libraries group, and find CoreVideo.framework in the list. Change the setting for it in the far right of the list from Required to Optional.

Additionally, this is an ARC-enabled framework, so if you want to use this within a manual reference counted application targeting iOS 4.x, you'll need to add -fobjc-arc to your Other Linker Flags as well.

To see this in action, look at any of the many sample applications I ship with the framework.

Solution 2

Please read this page http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework and this: https://github.com/BradLarson/GPUImage

Note: Simply, you can copy all source code files in framework/source folder to your project, and import GPUImage.h to use.

Regards!

Solution 3

Probably the simplest of all ways of integrating GPUImage into your project is via . And while the GPUImage CocoaPods repo isn't actually maintained by Brad, it's upkeep is pretty regular, and it makes integration a breeze.

> Go get it

Solution 4

Here's how to do it in Swift 5 in Xcode for iOS with Visual Directions:

Two things before you begin.

  • you should start this process on a copy/duplicate of your project until you get it correct (it took me several tries), or even start with a new project. If something goes wrong you want to keep your original project intact
  • if you have a project open with the GPUImage in it that you are trying to copy, make sure to close it first. You will get an error saying that there is a project with it already open

enter image description here

1- go to the GPUImage gitHub page

2- in the upper right hand corner, click the green Code button and then click Download Zip

enter image description here

3- in your current Xcode project (the one that you want to use GPUImage) click the first folder underneath the blue project icon

enter image description here

4- after that go to the top of Xcode and click File > Add Files to "yourProject"

enter image description here

5- when the new window appears go to Downloads (or wherever you downloaded GPUImage in the second step) > GPUImage3-master > framework > GPUImage.xcodeproj and then click Add. It's important that you make sure Copy Items if Needed and Create groups are checked.

enter image description here

6- you will now see GPUImage.xcodeproj inside your Xcode project underneath that same folder from step 3 (no need to do anything with it)

enter image description here

7- click your main project's blue project icon > Build Phases and the middle/center pane should be on TARGETS. Make sure you DON'T click the GPUImage.xcodeproj, that is the WRONG folder

enter image description here

8- while still under Build Phases click Dependencies then click the plus sign

enter image description here

9- when the pop up appears select GPUImage_iOS then select Add (make you sure you pick the iOS version and not the macOS version)

enter image description here

10- you will now see the GPUImage_iOS dependency under Dependencies (no need to do anything here)

enter image description here

11 -now while still under under Build Phases click Link Binary with Libraries then click the plus sign

enter image description here

12- when the pop up appears under Workspace > GPUImage > select GPUImage.framework from 'GPUImage_iOS' target ... then press Add (make sure you select the iOS version and not the macOS version)

enter image description here

13- now the library is linked (no need to do anything here)

enter image description here

14(a)- This is important, if underneath Build Phases there isn't a Copy Files folder than go to the top of Xcode and select Editor > Add Build Phase > Add Copy Files Build Phase. If the folder is already there I'm not sure what to do if the folder already exists. The Copy Files folder wasn’t initially there for me and I had create it using step 14(b). I would assume if it’s already there just open it and continue to step 16

enter image description here

14(b)- if for some reason Add Copy Files Build Phase is grayed out, do this or under Build Phases, in the upper left hand corner press the plus sign, then select New Copy Files Phase

enter image description here

15- now you will see a brand new Copy Files directory underneath Build Phases

enter image description here

16- if Copy Files isn't already open, press the toggle button to open it and next to Destination change Resources to Framework

enter image description here

17- while still under Copy Files, press the plus sign, when the pop up appears, if this is an iOS project, under Products, select the top GPUImage.framework and press Add. This last step is under Brad's directions

Add a new Copy Files build phase, set its destination to Frameworks, and add the upper GPUImage.framework (for iOS) or lower GPUImage.framework (for Mac) to that

enter image description here

18- now the GPUImage.framework has just been added to Copy Files

enter image description here

19- your Build Phase screen should look like this

enter image description here

20- clean the project Shift+Command+K

21- in whatever file you intend on using the GPUImage in go to the top and enter import GPUImage (it should start to appear under autocomplete) then build your project.

enter image description here

22- test to see if a Class and a Method from GPUImage works inside your project

// nothing is supposed to actually happen here, just test to see if the SmoothToonFilter() class and filterWithOperation() method are recognized without any errors
let testImage = UIImage(named:"some_image_from_your_assets")!
let toonFilter = SmoothToonFilter()
let _ = testImage.filterWithOperation(toonFilter)

enter image description here

Done!

Share:
13,516

Related videos on Youtube

Lakan Bahande
Author by

Lakan Bahande

Updated on June 04, 2022

Comments

  • Lakan Bahande
    Lakan Bahande about 2 years

    I am trying to make a camera/photo app that will add a filter on an image. I have heard of Brad Larson's GPUImage and so I downloaded it and tried to manipulate it to be more familiar with the code.

    Now, I made a new project in Xcode and added it on my frameworks, but i don't have any idea how to use it on a new project.

    How can I properly use GPUImage in my new project?

  • Lakan Bahande
    Lakan Bahande almost 12 years
    i'm a little confused with this "so within your project's build settings set the Header Search Paths to the relative path from your application to the framework/ subdirectory within the GPUImage source directory. Make this header search path recursive."
  • Lakan Bahande
    Lakan Bahande almost 12 years
    I'm having these errors "'GPUImage.h' file not found" and "Apple LLVM compiler 3.1 Error"
  • Lakan Bahande
    Lakan Bahande almost 12 years
    I've fixed the LLVM issue but GPUImage.h is still not read by my project.
  • Brad Larson
    Brad Larson almost 12 years
  • Lakan Bahande
    Lakan Bahande over 11 years
    Sir! Thank you! i have managed to use it now! but i have another issue here: stackoverflow.com/questions/12722880/…
  • Kyokook Hwang
    Kyokook Hwang almost 11 years
    Does the crash with "Symbol not found: _CVOpenGLESTextureCacheCreate" message occur in archiving time? not runtime?
  • Brad Larson
    Brad Larson almost 11 years
    @KyokookHwang - It occurs at runtime, but only if you've built for archival or for distribution on the App Store. I also believe that only occurs with specific versions of Xcode.
  • Michal Shatz
    Michal Shatz over 8 years
    @BradLarson Somehow I missed this: " Finally, you'll want to drag the libGPUImage.a library from the GPUImage framework's Products folder to the Link Binary With Libraries build phase in your application's target. "
  • GeneCode
    GeneCode over 7 years
    You oughta make a pod file for it imo.
  • Pramod Tapaniya
    Pramod Tapaniya about 7 years
    @BradLarson is it possible make filters like instagram by GPUImage?