How to find out the private API in my Xcode project? - iphone

How can identify the private API(Apple Banned API or code). Because I have to validated the app, but not validated. I am getting the error alert(check screenshot). I removed all the "uniqueIdentifier" code. But still not validate the app. In my app having lot of external resources, so that I am not able to identify the correct private API. Please let me know any suggestion for this problem.

In your case the message indicated that UDID was being accessed. You can do a search for your entire project for:
[[UIDevice currentDevice] uniqueIdentifier];
If your project also included third party static library such as Admob for example, in that case you should get an update from them. Because accessing to UDID has not been allowed since May 1st.

Finally I got the answer for check the "uniqueIdentifier" in the ".a" file. Please check the screenshot.
If you want to check the "uniqueIdentifier" code on the ".a" file. Use this command.
find . | grep -v .svn | grep ".a" | grep -v ".app" | xargs grep uniqueIdentifier

Related

Facebook Scrumptious sample app won't build

I did exactly what they do in the video. However, when I get to the scrumptious app and try to build/run it, mine fails. It says: "Parse Issue. Expected a type."
Here are the three lines that it thinks are broken (located in the ACAccountStore.h):
// Returns the account type object matching the account type identifier. See
// ACAccountType.h for well known account type identifiers
- (ACAccountType *)accountTypeWithAccountTypeIdentifier:(NSString
*)typeIdentifier;
// Returns the accounts matching a given account type.
- (NSArray *)accountsWithAccountType:(ACAccountType *)accountType;
// this method is called on an arbitrary queue.
- (void)requestAccessToAccountsWithType:(ACAccountType *)accountType
withCompletionHandler:(ACAccountStoreRequestAccessCompletionHandler)handler;
Here is a link to the tutorial. I only didn't even make it two min in before I hit this wall.
http://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/3.1/
I am running Xcode v4.4.1.
From Step 1 of that tutorial:
Install the Prerequisites
You need Xcode 4.5, and optionally, Git
Try upgrading XCode and see if it builds with the recommended version.

How To Build and Compile PJSIP for Xcode, Using sample code IPJSUA to test?

How to build and compile PJSIP using xCode and run the sample code IPJSUA?
First, you need to open the terminal. Terminal can be found at Applications->Utilities->terminal.
After you open the terminal, make sure you point to the desktop to make it easier to get the data folder. just type :
cd Desktop
Congrats, you already at your desktop. Now continue to type this.
svn co http://svn.pjsip.org/repos/pjproject/trunk pjproject
That code means you download the pjproject from the website to your desktop. After you finish download the PJSIP, you need to add a config_site.h. Honestly, I don't what should we do that, but just follow it. :D
How do you create a config_site.h? Just copy the config_site_sample.h, paste, and change the content become like this.
After this, we need to change the configure-iphone. I figured it out. If you just want to run at simulator you need to change the DevPath. If you want to test on device, just leave it be.
Now, I will give example to run on the Simulator. Open pjproject and you will find the configure-iphone. Open the file using a text editor and change the DEVPATH and hardcode the IPHONESDK.
The devpath will looks like this.
DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
Remember, this refers to the path to your Xcode app. If you want to make sure, go to finder->applications->xcode->show package contents. I also hardcoded the IPHONESDK.
IPHONESDK=iPhoneSimulator5.1.sdk
After you're done with that, we will going back to the terminal. Make sure you already at the pjproject folder. Type this.
export CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc
export CFLAGS="-O2 -m32 -miphoneos-version-min=5.0 -g -ggdb -g3 -DNDEBUG"
export LDFLAGS="-O2 -m32"
After that, you can configure it. Just click this on terminal. If you want to test on your device, you don't need to change the configure-iphone, export CC, etc., just directly configure-iphone.
./configure-iphone
After you're done, continue by entering the commands below to build the library and all dependencies. This line below is where the magic happens and it needs to complete successfully for you to continue.
make dep && make clean && make
You will find that all the libraries will compile. The resulting library can help us if we want to create a new project. -> this is what I'm thinking right now.
Now you almost finished, just go to the pjsip-apps->src->ipjsua. You will find the Xcode project, just click it to open at your xcode. Click build and run. You will find the interface like this.
If you want to test on your device, you must have the certificate and private key chain. I can't explain that because I got that certificate from my company. They provide it.
If you want to try, you must create a SIP account first. You can use sip2sip or ekiga. At here I tried ekiga. for example my SIP is 12345678#ekiga.net and 87654321#ekiga.net.
After the simulator we key in +a to add new account.
Next you will have to type your SIP name. remember to type "sip:". dont ever forget. here is the example:sip:12345678#ekiga.net.
After that you will have to type the URL address, just type ekiga.net since that is our URL. This URL means our server. Tor example, sip:ekiga.net.
Next is the auth realm. Type the same as the URL address, sip:ekiga.net.
Next is your username. In here my username is 12345678. You don't need to add sip or type with #ekiga.net.
Last is your password. After you register, it will automatically add it to the account. Just go to the textfield, and hit enter. It will refresh for you.
Next, we need to add buddy. Type +b, and you must input the URI address. Type sip:87654321#ekiga.net and you are done. Back to the textfield, it will add automatically to your buddy list.
You will see that your account still in offline mode. You need to change into online mode before you make a call. Just change the status by type t, and hit enter.
After that you can make a call by type M. and type 1. because our buddy is no 1. 1 is their ID. and you can make a call.
Please check below link. You can get source code from there and biuld for both device and simulator.
https://github.com/radif/SIPHON-SIP-Client-that-actually-compiles
For XCode 4.5
->
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/
export IPHONESDK=iPhoneSimulator5.1.sdk
export CC=/Applications/Xcode.app/Contents/Developer/usr/bin/gcc

still got nothing after can display documentation in Documentation, appledoc

I have been spending a while working on how to generate a documentation via appledoc with the help from here.
Now I can see my new library displayed on the left hand side from Xcode/Help/Documentation. However, it is empty after all. I am still figuring out but it seems no moving forward after all.
What I am doing is example.m is an example file that I wanna display
example.m
/** Query the geonames.org service for the name of the place near the
given
*position (WGS84)
*#param latitude The latitude for the position.
*#param longitude The longitude for the position. */
(void)findNearbyPlaceNameForLatitude:(double)latitude longitude:(double)longitude;
Now I am doing
appledoc --project-name Example --project-company "MY_COMPANY"
--company-id ABC.com -o "/Users/Desktop/AppleDoc_Example/" -h -d -n ~/Users/Desktop/AppleDoc_Example/example.m
After launching xcode, here it is
Does any one know what the problem is... Please advice me... Any comments are welcomed here.
Thanks
I've been using appledoc for a couple of years and I think you are missing the --install-docset argument which tells appledoc to install the docset into Xcode. I suspect appledoc is working fine, just not updating Xcode with the latest build.
You can see the script I use at https://github.com/drekka/dUsefulStuff/blob/master/scripts/createDocumentation.sh which may help.

iPhone notify_post notifications

How can I find out what notifications the iPhone has registered?
for instance:
notify_post("com.apple.springboard/Prefs");
Although an answer has already been confirmed for this question, since #Nate seemed confused about it, I thought I'd show an easier method.
notificationWatcher from Erica Utilities can be used to print a list of standard notifications as they happen. Run it from the command line like so:
notificationWatcher -st | grep -v rawOrientation
You don't need the grep bit, but it's useful to remove the many com.apple.springboard.rawOrientation notifications that appear when the device is moving around a lot.

Accessing & Using the MobileWiFi.framework

For a personal project of mine, I'm trying to retrieve iPhone WiFi signal strength. I'm fully aware that this in the land of undocumented goodness, so please refrain from the "No Appstore" answers. :)
Anywho, I've been reading up on previous WiFi Network Scanner Apps (WiFi Stumbler), but I'm afraid most (if not all) reflect outdated SDK documentation. Hopefully, this question will also provide some centralized / insightful material with the most recent iPhone SDK 3.1.2.
Here's my incomplete/not-working code:
.h
void *libHandle;
void *airportHandle;
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*scan)(void *, NSArray **, void *);
.m
libHandle = dlopen("/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi",RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");
open(&airportHandle);
bind(airportHandle, #"en0");
NSLog(#"Result %#",libHandle);
When executed on the device, it'll produce my ever-so-favorite...
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
I'm thinking the dynamic loading call, isn't loading anything. The directory: /System/Library/PrivateFrameworks/ only lists a Info.plist file with no binaries or aliases.
Probably doing something terribly wrong (wrong directory?)... appreciate any help!
Also, as a follow up. To extract the WiFi information, it might be done by:
GetInfoCopy = dlsym(libHandle, "Apple80211GetInfoCopy");
And my questions are 1) Has anybody had any luck with this? 2) How do you get a header dump like I would using with class-dump on Objective-C libraries (because MobileWifi is in C)?
For anybody who stumbles upon this question, here's my library to access 802.11 networks. Although Apple claims to deny any applications that use private frameworks, there are several closed-sourced WiFi applications on the AppStore. Use at your own risk.
This library works with iPhone SDK 3.1.2.
SOLStumbler.h
SOLStumbler.m
Use:
SOLStumbler *networksManager = [[SOLStumbler alloc] init];
[networksManager scanNetworks];
Result:
An networks NSDictionary of a info NSDictionary.
Use CFShow to explore the returned pointer containing information. Or call the description method for sample output.
Update as of July 2012 (iOS 5.0)
The code you're trying to use is pretty old. This stuff (e.g. WiFiManager or MobileWiFi) is in a private framework. That means Apple can, and often will, change it or move if from OS version to version.
I ran nm on the MobileWifi framework, and didn't see any of those function names. So, I think that's why your code fails.
$ pwd
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/MobileWiFi.framework
$ nm MobileWiFi | grep 80211
$
I suppose it might be necessary to run nm on the actual device framework, but I didn't waste my time, after looking at this:
Discussion of this framework, and follow-ons.
It looks like you can now find equivalent (?) functions in the IPConfiguration framework. Try this code:
libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);
I ran it on a jailbroken iOS 5.0.1 phone and it worked (loaded the dylib and found a few of the Apple80211 functions). From that thread I linked to, it looks like you may need to have this installed in /Applications on a jailbroken phone, in order to work fully. Or, possibly have to mess around with adding some entitlements to your sandboxed app.
These Apple80211xxx functions do not exist in MobileWiFi.framework (you can check using the `nm' tool against the SDK binaries).
(Also, it's impossible to dump a C header from binaries because all type information are removed during compilation. You need to reverse engineer it yourself or wait for someone to do so.)
I'm not sure if this would be a problem, but open/close/bind are names that are already in-use (standard C library).
The binary doesn't exist, as it is stored in the dyld shared_cache (dlopen will succeed because the library is technically 'loaded.'); however, I note that you're not checking that any of libHandle, open, close, bind or scan are valid when you retrieve them from the dl* functions.