How to create mobile substrate plugins on XCode? - iphone

I just wanna create a MS plugin to hook SpringBoard. I'm following "gojohnnyboi" tutorial from here "http://www.ipodtouchfans.com/forums/showthread.php?t=103558".
To create a dylib on XCode, I'm following "SkylarEC" tutorial. I mix these two great tutorials and finally got succeed by getting a dylib. But when I placed the dylib in the /Library/MobileSubstrate/DynamicLibraries/ nothing is happened (no alert was shown).
By evaluating, I found that, this dylib doesn't have any starting point when it was loaded into the memory. So I mentioned a starting point by declaring a constructor in the .mm file like,
__ attribute__((constructor)) static void init()
{
Class _$SBAppIcon = objc_getClass("SBApplicationIcon");
MSHookMessage(_$SBAppIcon, #selector(launch), (IMP) &__$ExampleHook_AppIcon_Launch, "__OriginalMethodPrefix_");
}
But when I'm trying to compile this, I'm getting an error like,
**Undefined symbols:
"_MSHookMessage", referenced from:
init() in ExampleHook.o
ld: symbol(s) not found
collect2: ld returned 1 exit status.**
Does anyone has idea how to solve this? It would be great and more helpful if anyone share the detailed tutorial/instructions to create a dylib on XCode.
P.S I placed all the libsubstrate.dylib and substrate.h files in the corresponding location. And the locations are,
libsubstrate.dylib : /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/
substrate.h : /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include
and my base SDK is 3.0.

You should probably check out iOSOpenDev

(These are very old tutorials. Some modern MS code can be found in http://iphonedevwiki.net/index.php/MobileSubstrate. Eventually someone needs to write an updated tutorial...)
Make sure you have added libsubstrate.dylib in your Xcode project (Add → Existing files...). The compiler will not automatically find which dylib to link unless you tell it so.

Try http://unlimapps.com/?p=15 it will be much easier to compile plugins using the methods in that post

You have to copy CydiaSubstrate.framework to /Library/Frameworks in your mac and link to CydiaSubstrate
#include <CydiaSubstrate/CydiaSubstrate.h>

Related

Undefined symbols for architecture arm v7

I am getting this error any solution please ?
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_ASIdentifierManager", referenced from:
objc-class-ref in FacebookSDK(FBSettings.o)
You need to link your application with AdSupport.framework. This framework is available in iOS6.0 and later. If your application is targeted to use iOS versions less than 6.0 then you need to link to AdSupport.framework as Optional instead of Required.
The Facebook developers page mentions the steps to upgrade your FB SDK. https://developers.facebook.com/docs/ios/upgrading-from-3.0-to-3.1/. You can find the list of URLs for various SDK versions on this page.
Check it out.
Hope that helps!
I think you didn't add AdSupport.framework. Also remember to remove -all_load linker flag.
The message hints can't find the class ASIdentifierManager, because the corresponding framework not really add it to the object. Just add the framework which includes the class.

ios: simulate touch: errors when trying private framework

I'm trying to simulate touch in iOS. There some pointers in SO suggest that I could try GraphicsServices/GSEvent.h in the private framework. However, when I followed the steps here, I got these errors:
Undefined symbols for architecture armv7:
"_GSCopyPurpleNamedPort", referenced from:
-[TestGraphicsServicesAppDelegate application:didFinishLaunchingWithOptions:] in TestGraphicsServicesAppDelegate.o
"_GSSendEvent", referenced from:
-[TestGraphicsServicesAppDelegate application:didFinishLaunchingWithOptions:] in TestGraphicsServicesAppDelegate.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Any suggestion? Thanks
edit:
the code I used is from Using GraphicsServices.h/GSEvent as well as compiling CLI iPhone tools with Xcode.
Looks like the errors are from this line.
mach_port_t thePortOfApp = GSCopyPurpleNamedPort...
GSSendEvent(&record, thePortOfApp);
OK, I think I made some mistakes when I added the framework.
Somehow I got my project working now.
The errors have gone away after I did a couple things.
In Build Setting, I changed Always Search User Paths to Yes.
Added the path to the private header in User Header Search Paths.
Also, in Build Phrases tab, I add the GraphicsServices in the Link Binary with Libraries section.
Now I can do simple stuff like GSEventLockDevice() and simulating pressing home button.
Still have no clue about touch.

LayarPlayer - LPAugmentedRealityViewController build problem on iphone

I´m trying to get the LayarPlayer SDK to work but i im stuck. I´ll keep getting this warning no matter what i do. I have followed there "guide" but it doesnt help. Anyone here who can help?
"_OBJC_CLASS_$_LPAugmentedRealityViewController", referenced from:
objc-class-ref-to-LPAugmentedRealityViewController in FirstViewController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Seems to me you need to link to the binary library. In Xcode go "Groups & Files" (left panel in the default layout). Then right click on Add Existing Frameworks->Add Other ... locate and select liblayarplayer.a in the "Release" directory.
It seems that you have not accurately added their library, or you might not be importing the appropriate files accordingly using #import.
Please post the code of your FirstViewContoller.m

".objc_class_name_CUIFramework",referenced from:

I'm working with developing an application for iPhone in Objective-C
Can anyone tel me how to solve this error:
".obj_class_name_CUIFramework", referenced from:
collect2:ld returned 1 exit status
literal-pointer#_OBJC#_cls_refs#CUIFramework in MF_CoreAppDelegate.o
symbol(s) not found
I tried to compile my code, i don't have idea for what this error is related to. Please help.what could be the problem?
i've added Foundation framework and UIKit framework
Your code's well-formed, so compiles just fine. When the linker tries to link your application to the frameworks you use, it finds that you reference a framework that's not been imported to your application.
It looks like your code is using a class CUIFramework, but that you haven't added the appropriate framework to your project.

Linking Errors setting up GTM to do iPhone Unit Tests

My colleague and I have been struggling with unit tests now for weeks. We have tried to get SenTest, GTM, and other frameworks set up, but we can never get past a gnarly ball of linking errors.
Here's where I am now with GTM. I would appreciate any guidance.
Beyond helping out on SO, if you have experience with this, I'd happily pay a consultant. Please email me at andrew#gaiagps.com if you think you can help me with this.
I followed the instructions here:
http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting. I found I also needed to add the file "GTMObjC2Runtime.h" to the project. Then, I was able to get to the point where I got the expected console output after installing the framework: "Executed 0 tests, with 0 failures (0 unexpected) in 0.030 (0.030) seconds"
Next, I went to write a test case for one of my classes. I created WebAPITest.h. I created a simple test, which worked fine. I just verified 1 == 1.
Next, I decided to write a test for my AppDelegate.h. So, I added #import "AppDelegate.h" to WebAPITest.h, and I got 8 linking errors. My project uses FBConnect, and the compiler complain that it can't find the FBConnect files. To address this, I added the the FBConnect header search path to the Test target's build config, and the linking errors went away.
Now is where I am stumped. When I try and reference AppDelegate in the implementation, I get these linking errors:
Building target “fooTest” of project “foo” with configuration “Debug” — (2 errors)
Undefined symbols:
".objc_class_name_AppDelegate", referenced from:
literal-pointer#__OBJC#__cls_refs#AppDelegate in WebAPITest.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
So, I tried adding AppDelegate to the Test target, but then it
started wanting all the dependencies for AppDelegate too, and I'm
guessing I'm not supposed to add dozens of files to the unit test
target.
Any idea what I need to do next?
Your test bundle does need access to the compiled class you are trying to test. It's your decision to accomplish that by either adding it directly to the target (and yes, with all its dependencies), by linking to a library that implements the class, or by setting up your test bundle so that it is loaded by a host application that has an implementation of the class.
This reference might be useful to you:
http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html#//apple_ref/doc/uid/TP40007959-CH20-SW3
And also from the main unit testing documentation at Apple:
http://developer.apple.com/mac/library/DOCUMENTATION/DeveloperTools/Conceptual/UnitTesting/1-Articles/CreatingTests.html#//apple_ref/doc/uid/TP40002171
Look for terms like "Test Host" and "Bundle Loader."
This stuff is not very straightforward to understand but the documentation eventually clarifies everything if you hunker down and plow through it.