Difference between revisions of "Logos"

From iPhone Development Wiki
Jump to: navigation, search
(syntax hilighting!)
m (It’s confusing to keep this around, so replacing with a link to the current documentation)
(Tag: Replaced)
 
(48 intermediate revisions by 15 users not shown)
Line 1: Line 1:
Logos is a component of the [[Theos]] development suite that allows method hooking code to be written easily and clearly, using a set of special preprocessor directives.
+
{{soft redirect|https://theos.dev/docs/logos}}
  
== Overview ==
+
This article is obsolete, and has been replaced by the [https://theos.dev/docs/logos theos.dev website].
  
The syntax provided by Logos greatly simplifies the development of MobileSubstrate extensions ("tweaks") which can hook other methods throughout the OS.
+
If you need historical installation instructions, you can find the last version of this article [https://iphonedev.wiki/index.php?title=Logos&oldid=5734 here].
In this context, "method hooking" refers to a technique used to replace or modify methods of classes found in other applications on the phone.
 
 
 
== Getting Logos ==
 
 
 
Logos is distributed with [[Theos]], and you can use Logos' syntax in any Theos-built project without any extra setup.  For more information about Theos, visit [[Theos|its page]].
 
 
 
== Using Logos ==
 
 
 
=== Examples ===
 
 
 
Write me!
 
 
 
=== List of Logos Directives ===
 
 
 
==== Initialization ====
 
 
 
===== %init =====
 
 
 
%init
 
%init([<class>=<expr>, …])
 
%init(Group[, [+|-]<class>=<expr>, …])
 
 
 
Initialize a group (or the default group). Passing no group name will initialize "_ungrouped", and passing class=expr arguments will substitute the given expressions for those classes at initialization time. The + sigil (as in class methods in Objective-C) can be prepended to the classname to substitute an expression for the metaclass. If not specified, the sigil defaults to -, to substitute the class itself. If not specified, the metaclass is derived from the class.
 
 
 
==== Block-level ====
 
 
 
The directives in this category open a block of code which must be closed by an %end directive (shown below).
 
 
 
===== %config =====
 
 
 
%config(X=Y)
 
 
 
Set a logos configuration flag - currently unused, but the only existing configurable flag is 'generator', and the only generator that exists is "MobileSubstrate"
 
 
 
===== %hook =====
 
 
 
%hook Classname
 
 
 
Open a hook block for the class named ''Classname''.
 
 
 
Here's a trivial example:
 
 
 
<source lang="logos">
 
%hook SBApplicationController
 
-(void)uninstallApplication:(SBApplication *)application {
 
    NSLog(@"Hey, we're hooking uninstallApplication:!");
 
    %orig;
 
    return;
 
}
 
%end
 
</source>
 
 
 
===== %subclass =====
 
 
 
%subclass Classname: Superclass <Protocol, Protocol>
 
 
 
Subclass block - the class is created at runtime and populated with methods. ivars are not yet supported.
 
 
 
===== %group =====
 
 
 
%group Groupname
 
 
 
Begin a hook group (for conditional initialization or code organization) with the name ''Groupname''. All ungrouped hooks are in the implicit "_ungrouped" group.
 
 
 
===== %class =====
 
 
 
%class Class
 
 
 
Forward-declare a class. Outmoded by %c, but still exists. Creates a $Class variable, and initializes it with the "_ungrouped" group.
 
 
 
===== %new =====
 
 
 
%new(signature)
 
 
 
Add a new method to a hooked class or subclass.
 
 
 
===== %ctor =====
 
 
 
%ctor { … }
 
 
 
Generate an anonymous constructor (of default priority).
 
 
 
===== %end =====
 
 
 
%end
 
 
 
Close a hook/subclass/group block.
 
 
 
==== Inline ====
 
 
 
===== %c =====
 
 
 
%c(Class)
 
 
 
Effectively evaluates to Class, at runtime. Technically, creates $Class and populates it when the "_ungrouped" group is initialized.
 
 
 
===== %orig =====
 
 
 
%orig
 
%orig(args)
 
 
 
Call the original hooked method. Doesn't function in a `%new`'d method. Works in subclasses, strangely enough, because MobileSubstrate will generate a supercall closure at hook time. (If the hooked
 
method doesn't exist in the class we're hooking, it creates a stub that just calls the superclass implementation.) args is passed to the original function - don't include `self` and `_cmd`, Logos does this for you.
 
 
 
===== %log =====
 
 
 
%log
 
 
 
Dump the method arguments to syslog.
 
 
 
[[Category:Development Tools]]
 

Latest revision as of 18:12, 19 February 2022

Soft redirect to:https://theos.dev/docs/logos

This article is obsolete, and has been replaced by the theos.dev website.

If you need historical installation instructions, you can find the last version of this article here.