Reputation: 165
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?
Upvotes: 6
Views: 14453
Reputation: 19622
Here's how to do it in Swift 5 in Xcode for iOS with Visual Directions:
Two things before you begin.
1- go to the GPUImage gitHub page
2- in the upper right hand corner, click the green Code
button and then click Download Zip
3- in your current Xcode project (the one that you want to use GPUImage) click the first folder underneath the blue project icon
4- after that go to the top of Xcode and click File
> Add Files to "yourProject"
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.
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)
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
8- while still under Build Phases click Dependencies
then click the plus sign
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)
10- you will now see the GPUImage_iOS
dependency under Dependencies
(no need to do anything here)
11 -now while still under under Build Phases
click Link Binary
with Libraries then click the plus sign
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)
13- now the library is linked (no need to do anything 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
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
15- now you will see a brand new Copy Files
directory underneath Build Phases
16- if Copy Files
isn't already open, press the toggle button to open it and next to Destination
change Resources
to Framework
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
18- now the GPUImage.framework
has just been added to Copy Files
19- your Build Phase screen should look like this
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.
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)
Done!
Upvotes: 4
Reputation: 73024
Probably the simplest of all ways of integrating GPUImage into your project is via cocopods. 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 itUpvotes: 3
Reputation: 170317
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.
Upvotes: 16
Reputation: 4744
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!
Upvotes: 5