All pastes #1025535 Raw Edit

Miscellany

public text v1 · immutable
#1025535 ·published 2008-05-22 03:15 UTC
rendered paste body
[17:01:33] 	 * saurik has the category overlay stuff in place for WinterBoard, and just needs to fill out the functionality[17:01:37] <nvr>	heh thatd be great news if installer became pay only[17:01:49] <nvr>	lol[17:01:52] <francis>	installer wont, its nullriver's honeypot of donations[17:01:53] <_BigBoss_>	not intsaller, summerboard[17:01:58] <nvr>	ohh[17:02:03] <francis>	but bigboss[17:02:07] <francis>	with customize 2.0[17:02:13] 	 * saurik (also has a slightly better attack at redirecting methods than he believes summerboard was capable of, which should make development easier)[17:02:14] <francis>	how can a non-free summerboard compete?[17:02:32] <_BigBoss_>	francis easy when there's nothing else and only pay ver[17:02:40] <francis>	customize 2.0[17:02:40] <saurik>	(like, as far as being able to rapidly attack catepiller/kate features)[17:02:46] <francis>	and winterboard soon[17:02:49] <_BigBoss_>	customize isnt a summerboard replacement[17:02:57] <_BigBoss_>	and will those solve 80 app limit?[17:03:09] <francis>	ask saurik :P[17:03:12] <saurik>	what is the 80 app limit, btw?[17:03:22] <francis>	springboard doesnt like having more than 80apps[17:03:28] <francis>	it does not start[17:03:30] <saurik>	does anything currently solve that?[17:03:33] <_BigBoss_>	put 80 apps on yoru phone and springboard goes into a crash loop[17:03:34] <francis>	summerboard[17:03:37] <nvr>	interesting[17:03:43] <eggy>	heh[17:03:52] <eggy>	fail[17:03:55] <nvr>	so winterboard will have to fix that too[17:03:57] <saurik>	ok, if summerboard does it, then it should be easy to resolve[17:04:11] <nvr>	yep cant be that hard[17:04:49] <_BigBoss_>	"cant be that hard" does anyone know where to start?[17:04:55] <_BigBoss_>	If not, it's infinitely difficult[17:05:19] <nvr>	if they did it we know it can be done[17:05:34] <_BigBoss_>	it doesnt matter if it was done. If you dont know how to do it you cant say "it cant be that hard"[17:06:07] <nvr>	yes your correct but at least we know its possible[17:06:25] <_BigBoss_>	then say "its possible" not "it cant be that hard". That's a big peeve of mine[17:06:28] <francis>	LuLz[17:06:37] <_BigBoss_>	I get app req's "can yo umake this, it cant be that hard" by someone that cant even code[17:06:38] <saurik>	_BigBoss_: summerboard overrides like 15 methods[17:06:40] <nvr>	k sorry[17:06:43] <saurik>	_BigBoss_: it has to be one of those[17:07:02] <_BigBoss_>	ok[17:07:04] <francis>	_BigBoss_: it can't be hard to avoid saying it cant be hard[17:07:27] Quit	Lazarus has left this server (Ping timeout).[17:07:30] <_BigBoss_>	how does summerboard insert itself?[17:07:52] <saurik>	it uses a category[17:07:55] <saurik>	http://svn.saurik.com/repos/menes/trunk/winterboard/[17:08:16] <saurik>	that does the same thing, right now to override something in the bluetooth manager for one of Okori's clients (won't be in an actual released WinterBoard)[17:08:15] <_BigBoss_>	what is "a category"?[17:08:31] <saurik>	it's an objective-c feature that lets you extend an existing class by providing new messages[17:08:45] <saurik>	if you have a message with the same name, the last category to get added wins[17:08:56] <saurik>	so winterboard/summerboard compile two files[17:08:58] <saurik>	a dylib and a bundle[17:09:07] <saurik>	the dylib is inserted using DYLIB_INSERT_LIBRARIES[17:09:13] <saurik>	here is the code for my dylib:[17:09:14] <saurik>	http://svn.saurik.com/repos/menes/trunk/winterboard/Initialization.m[17:09:30] <saurik>	it just verifies it is in springboard, disables itself for it's children (removes from DYLIB_...)[17:09:35] <saurik>	and then loads the bundle[17:09:46] <saurik>	I also take the time in there to rename some existing messages[17:09:50] <saurik>	as categories really _replace_[17:09:53] <saurik>	they don't just overlap[17:09:56] <saurik>	the original is gone[17:10:12] <saurik>	currently my bundle just has that aforementioned bluetooth hack[17:10:21] <saurik>	(make a file on the filesystem if a bluetooth headset is connected)[17:10:24] <saurik>	http://svn.saurik.com/repos/menes/trunk/winterboard/DevEngine.mm[17:10:46] <saurik>	the first @interface is just to name the renamed method (as I needed to be able to call through to the original)[17:10:50] <saurik>	it doesn't do anything[17:10:56] <_BigBoss_>	sounds cool. I didnt know about categories or insert libraries[17:10:58] <saurik>	the latter @implementation block overrides the method[17:11:15] <saurik>	the fact that it is a "category" is due to the name in () after the class name[17:11:51] <saurik>	all summerboard is then doing is replacing some simple methods[17:11:52] <saurik>	example:[17:11:58] <saurik>	[SBApplicationIcon(SummerBoard) icon][17:12:11] <saurik>	that is probably some accessor that probably returns a UIImage * or something for the icon[17:12:56] <saurik>	all you then have to do is classdump springboard[17:13:19] <saurik>	and it's actually a pretty simple/fun party to start hacking the existing application[17:13:49] <saurik>	(the latest include- contains my class dump of springboard which has some fixes for the #include paths, but you can do that yourself pretty quickly)[17:15:55] <_BigBoss_>	cool it does sound fun[17:15:57] <saurik>	oh, and you have to compile your .dylib with a "module initializer"[17:16:06] <saurik>	you can see that in the makefile[17:16:44] <saurik>	and the bundle needs to be compiled with a fairly standard (for bundles) -flat_namespace -undefined suppress in order to let it bind to the objective-c symbols exported by the executable[17:16:52] <saurik>	(as you can't pass springboard back into the link line to link against it)[...][17:20:56] <saurik>	_BigBoss_: well, I'm definitely not attached to being "the guy" for winterboard, so if you'd like to work on that with me, I'd love that (and can give you svn commit access); also, if you'd like to use that setup code in your own programs, go ahead (in case that wasn't obvious, as I think I haven't put my standard BSD license at the top of those files yet)[17:21:20] <_BigBoss_>	saurik i may be interested in that task[...][18:01:02] <saurik>	the way summerboard works isn't to attach to an existing process[18:01:16] <saurik>	(which is possible, but /is/ somewhat hard if you don't know enough assembly)[18:01:28] <saurik>	but instead to insert the dylib using DYLD_INSERT_LIBRARIES[18:01:51] <spicychicken>	yeah, so I was working on it both ways[18:03:17] <spicychicken>	so what does the code you have now *do*?[18:03:40] <saurik>	it injects itself into springboard; i.e., all the bootstrapping parrts[18:04:41] <saurik>	right now the only thing it's replacing is something temporary: a hack to detect that a bluetooth headset is attached, for one of my clienets[18:04:45] <saurik>	clienets -> clients[18:06:38] 	 * saurik (needed, last thursday or something, on very short notice that feature, so he spent the hour to write the .dylib/bundle injection as WinterBoard and then used it for his client by adding the bluetooth code)[18:07:20] <spicychicken>	nice