You are on page 1of 4

Aral Balkan · Private iPhone APIs in XCode for Dummies 11/18/09 11:38 AM

The age of features is dead;


Welcome to the age of User Experience.

Aral Balkan
Bio
Projects
Consulting
Speaking
Contact

User Experience
Open Source
Mobile
Flash

Search

Today I had to use a private API while spiking a feature


for an iPhone app I'm working on and I ran into a couple
of gotchas along the way. There doesn't seem to be a
simple step-by-step guide for using private iPhone APIs
in XCode, so here's goes:

1. First off, you're going to need the header files for


the private frameworks. To dump them, use the
Framework Dump Kit from Erica Sadun's site.
Download the DumpFrameworks Perl script
anywhere and put the class-dump binary
somewhere on your path (I put it in /usr/local/bin/)
2. Run DumpFrameworks (navigate to the folder you
downloaded it to in Terminal and type
./DumpFrameworks). This will create the headers in
~/Headers.
3. In your XCode project, right-click the Frameworks
folder in the Groups & Files panel and select Add
→ Existing Frameworks. Navigate to the header
file(s) you want to add and select them. You should
see the headers added to your project.
4. Go to Project → Edit Project Settings, click on the
Build tab, and scroll down to the Linking section.
For the Other Linker Flags property, enter -
force_flat_namespace and -undefined
suppress (thank you, Ken Ferry). If you forget
this, you will get a linker error telling you that the
symbols for the private classes you're using could
not be found.
5. Open up the header files you imported into your project and remove the superfluous import statements
that the header dumper put there. Usually this is just an unnecessary #import "NSObject.h" but

http://aralbalkan.com/2106 Page 1 of 4
Aral Balkan · Private iPhone APIs in XCode for Dummies 11/18/09 11:38 AM

there may be others also. If you get errors, look for the SomeHeader.h: No such file or directory
messages and remove the import statements corresponding to those errors from the private header
files.
6. Finally, import the private header files, use the classes in your application, build and run!

Of course, whether or not you should use the iPhone private API is another matter (undocumented calls may
break at any time, Apple may reject your app, etc.) If you do want to play around with them, however, I
hope the above instructions help you to get started without too much pain.

The Private iPhone APIs in XCode for Dummies article by Aral Balkan, unless otherwise
expressly stated, is licensed under a Creative Commons Attribution-Noncommercial 2.0 UK: England
License.

Add Your Comment

Name

Email (will not be published)

Website

Submit Comment

Spam Protection by WP-SpamFree

Private iPhone APIs in XCode for Dummies


12 Comments »

1.

What kind of API calls did you need then? Might be handy. Would be nice if they had some Private
API call to add calendar events…

Weyert

2.

Nothing too sexy; APIs that I’m assuming Apple will make public with the next release since they’re
necessary to use some of the other public APIs.

Aral

3.

Hi,
Is this is right that Apple can application if you use private frameworks…
and is there any application which uses them..

http://aralbalkan.com/2106 Page 2 of 4
Aral Balkan · Private iPhone APIs in XCode for Dummies 11/18/09 11:38 AM

Surendra

4.

i want to use Celestail framework for Recording voice in one of my application along with playing.

Please help me….

Surendra

5.

there is any way to record and play sound simultaneous. I need to save it in file…

Surendra

6. [...] Timberline: File Index Aral Balkan – Private iPhone APIs in XCode for Dummies [...]

【OS3.0】エリカ様のように非公式APIをリストアップする方法 | iphoneアプリで稼げるのか

7.

Does this work with XCode 3.1.3 and the 3.0 APIs?

Leo

8.

Hi Aral,

I know this is a late reply to your post but I’ll hope you’ll read it.
First, thanks for an excellent article.

I’ve followed your little tutorial but I get an error that I can’t solve for the moment. After importing
the header “PLCameraController.h” to my class I get the following build error:
/Users/usr/Playground/Collage/../../Headers/PrivateFrameworks/PhotoLibrary/PLCameraController.h:21:
error: cannot find protocol declaration for ‘PLCameraControllerDelegate’

Do you have any idea on what to do here?

Thanks,
Andreas

Andreas

9.

Hey Andreas,

Have you tried doing a search for the Delegate protocol that’s missing and importing the header file
that you find it in? I haven’t been playing with private frameworks since this post so not sure what
advice I can give beyond that. (Apart from that, maybe trying to create an empty protocol with that
name and see if it balks?)

Aral

http://aralbalkan.com/2106 Page 3 of 4
Aral Balkan · Private iPhone APIs in XCode for Dummies 11/18/09 11:38 AM

10.

Hey Andreas
Did you solved this?
If you did, Could you post it here? I will appreciate it very much.
Thanks again

Ignacio

11.

Hi Aral,

I tried using the dumpkit for SDK 3.1.2 but it seems to break:

class-dump: Input file


(/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/ApplicationServices.framework)
doesn’t contain an executable.

Any idea how to fix this? Hope so i’m eager for the sdk’s headers

EeKay

12.

Hey EeKay, I’m sorry but I haven’t tried it in 3.1.2. If past performance is any indication, however,
I’m sure the Erika will release the headers soon, if she hasn’t done so already

Aral

Copyright © 2001-2009 Aral Balkan. Credits

Cancel

http://aralbalkan.com/2106 Page 4 of 4

You might also like