<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Apple Mac OS X</title>
        <link>http://geekswithblogs.net/dirksblog/category/7290.aspx</link>
        <description>Apple Mac OS X</description>
        <language>de-DE</language>
        <copyright>Dirk Eisenberg</copyright>
        <managingEditor>dirk.eisenberg@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>iPhone Software 2.0: Jailbreak und Unlock mit pwnage 2.0</title>
            <link>http://geekswithblogs.net/dirksblog/archive/2008/07/20/123914.aspx</link>
            <description>Schon ganz ungeduldig habe ich den Blog des &lt;a href="javascript:void(0);/*1216578322412*/"&gt;iphone Dev Teams&lt;/a&gt; beobachtet und auf das Release von pwnage 2.0 gewartet. Dieses Tool soll in der Lage sein bei meinem iPhone 2G den jailbreak und unlock durchzuführen. Um die Spannung zu nehmen, es hat geklappt und für alle die keinen MAC daheim haben, gibt es einen Möglichkeit den unlock auch durchzuführen.&lt;br /&gt;
&lt;br /&gt;
Ein kurz Anleitung wie der Prozess durchzuführen ist findet man &lt;a href="javascript:void(0);/*1216578448001*/"&gt;hier&lt;/a&gt;. Im weiteren Verlauf der Kommentare finden sich auch Links zu den Bootloader. Ich wollte eigenlich nur eine Hürde beschreiben. Wie bekommt man sein iPhone in den DFU mode?&lt;br /&gt;
&lt;br /&gt;
1. iPhone über USB andocken &lt;br /&gt;
2. iPhone über die Tastekombination Power + Home ausschalten (ca 7s)&lt;br /&gt;
3. Power + Home Taste ca zwei weitere Sekunden gedrückt halten&lt;br /&gt;
4. Danach die Power-Taste loslassen und Home gedrückt halten bis iTunes das Geräte im Recovery erkennt. Der Monitor des iPhones muss schwarz sein.&lt;br /&gt;
&lt;br /&gt;
Danach befindet sich das iPhone im DFU Mode und kann beliebige Images verdauen. Um ein Image (wie das von pwnage erzeugte) einzuspielen, einfach die alt-Taste (auf MAC) oder die CTRL-Taste gedrückt halten und dann auf Restore in iTunes drücken. Jetzt kann ein beliebiges .ipsw ausgewählt werden. So können auch Windows nutzer ihr iPhone unlocken wenn sie ein passendes .ipsw haben.&lt;br /&gt;
&lt;br /&gt;
 &lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123914"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123914" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dirksblog/aggbug/123914.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dirk Eisenberg</dc:creator>
            <guid>http://geekswithblogs.net/dirksblog/archive/2008/07/20/123914.aspx</guid>
            <pubDate>Sun, 20 Jul 2008 18:35:31 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/dirksblog/comments/123914.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/dirksblog/archive/2008/07/20/123914.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dirksblog/comments/commentRss/123914.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/dirksblog/services/trackbacks/123914.aspx</trackback:ping>
        </item>
        <item>
            <title>SMBIOS Daten unter Mac OS X lesen</title>
            <link>http://geekswithblogs.net/dirksblog/archive/2008/02/24/119931.aspx</link>
            <description>Die Daten aus dem System Management Bios geben Aufschluss über die vorliegende Hardware und können nutzbringend in der eigenen Software verwendet werden. Ich selbst wollte SMBIOS-Daten auch in einer Applikation auf einem Mac Book Pro verwenden. Um diese auslesen zu können habe ich ein wenig suchen müssen. Aus diesem Grund möchte ich hier eine Step-By-Step-Beschreibung zu diesem Thema weitergeben:&lt;br /&gt;
&lt;br /&gt;
Wo findet man die SMBIOS Daten:&lt;br /&gt;
&lt;br /&gt;
In der &lt;a href="http://www.dmtf.org/standards/smbios"&gt;Dokumentation des Standards&lt;/a&gt; findet man einen Hinweis das sich zwischen zwei bestimmten Speicheradressen der Anchor-String "SMBIOS" verbirgt. Konnte dieser String gefunden werden, hat man die Offset-Tabelle für die SMBIOS-Daten im Speicher gefunden. &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt; Wie kommt man an diese Daten:&lt;/h3&gt;
Für diese einfache Frage ist die Antwort eigentlich auch sehr einfach. Man muss nur den Hauptspeicher des Rechner an der entsprechenden Stelle durchsuchen. Das ist auf alten Betriebssystemen wie DOS einfach möglich, auf modernen Betriebssystemen wie Windows, Linux oder Mac OS X nicht. Hier verwaltet der Kernel den Speicher und somit hat auch nur der Kernel Zugriff auf diesen. User-Space-Prozesse erhalten immer nur virtuelle Speicherseiten, also niemals den zu durchsuchenden Speicherbereich. Um doch an diesen Speicher zu kommen gibt es unter vielen Unix-System, sowie Linux und teilweise Mac  des (k)mem-Device /dev/kmem. Auf dieses kann jedes User-Space-Programm zugreifen und somit auch die SMBIOS-Tabelle lesen. Windows bietet eine enstprechende Raw-Data-Tabelle die über WMI erreichbar ist. Ab Mac OS X 10.4 wurde dieses Device entfernt.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt; AppleSMBIOS.kext:&lt;/h3&gt;
Statt sich jetzt eine eigene Kernel-Extension schreiben zu müssen, hat das Apple erledigt. Die AppleSMBIOS-Kernel-Extension bietet als IOService die Möglichkeit auf die SMBIOS-Daten zuzugreifen. Was ist also zu tun:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
    &lt;li&gt;Wir müssen erstmal einen Komnuikationspunkt zum Darwin-Kernel aufbauen. Hierzu nutzen wir einen Mach-Port (es ist erstmal nicht weiter wichtig mehr darüber zu wissen)&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style="font-family: Courier New;"&gt;     mach_port_t myMasterPort;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
    &lt;span style="font-family: Courier New;"&gt;     IOMasterPort(MACH_PORT_NULL, &amp;amp;myMasterPort);&lt;/span&gt;&lt;br /&gt;
     &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Also nächstes muss der AppleSMBIOS-IOService erstmal im System gefunden werden. Dabei werden Services in MAC OS X über eine Service-Identity identifiziert. Folgender Code sucht den SMBIOS-IO-Service:&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style="font-family: Courier New;"&gt;     CFMutableDictionaryRef        myMatchingDictionary; &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
    &lt;span style="font-family: Courier New;"&gt;     io_object_t                   foundService;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
    &lt;br /&gt;
    myMatchingDictionary = IOServiceMatching("AppleSMBIOS");&lt;br /&gt;
    foundService = IOServiceGetMatchingService( myMasterPort, myMatchingDictionary );&lt;br /&gt;
          &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Wurde der Service gefunden kann man mit dem Lesen der SMBIOS-Daten beginnen.&lt;br /&gt;
    &lt;br /&gt;
    &lt;span style="font-family: Courier New;"&gt;     CFMutableDictionaryRef    properties    = NULL;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
    &lt;span style="font-family: Courier New;"&gt;     CFDataRef                 smbiosdata    = NULL;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
    &lt;span style="font-family: Courier New;"&gt;         &lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;
    &lt;span style="font-family: Courier New;"&gt;     IORegistryEntryCreateCFProperties( foundService, &lt;br /&gt;
                                       &amp;amp;properties, &lt;br /&gt;
                                       kCFAllocatorDefault, &lt;br /&gt;
                                       kNilOptions );&lt;/span&gt;&lt;br /&gt;
    &lt;br style="font-family: Courier New;" /&gt;
    &lt;span style="font-family: Courier New;"&gt;     CFDictionaryGetValueIfPresent( properties, &lt;br /&gt;
                                   CFSTR( "SMBIOS" ), &lt;br /&gt;
                                   (const void **)&amp;amp;smbiosdata );&lt;/span&gt;&lt;br /&gt;
          &lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Jetzt stehen die SMBIOS-Daten zur Verfügung und müsse dem Standard entsprechend verarbeitet werden.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;br /&gt;
Abschluss:&lt;/h3&gt;
Scheinbar gibt es hier und da ein kleines Problem mit der Abfrage von SMBIOS-Daten. Besonders wenn man in Verbindung mit &lt;a href="http://netkas.org"&gt;netkas&lt;/a&gt; versucht Mac OS X auf einer anderen Hardware zu nutzen. Auch gibt es eine &lt;a href="http://forum.insanelymac.com/index.php?showtopic=88087"&gt;spezielle Anpassung&lt;/a&gt; um Probleme in Verbindung mit Adobe CS zu vermeiden.                &lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119931"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119931" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dirksblog/aggbug/119931.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dirk Eisenberg</dc:creator>
            <guid>http://geekswithblogs.net/dirksblog/archive/2008/02/24/119931.aspx</guid>
            <pubDate>Sun, 24 Feb 2008 19:36:27 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/dirksblog/comments/119931.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/dirksblog/archive/2008/02/24/119931.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dirksblog/comments/commentRss/119931.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/dirksblog/services/trackbacks/119931.aspx</trackback:ping>
        </item>
        <item>
            <title>Dynamische Libraries mit dem Applikations-Bundle verteilen</title>
            <link>http://geekswithblogs.net/dirksblog/archive/2008/02/07/119345.aspx</link>
            <description>auch auf einem Apple Mac nutzt man in der Regel dynamische Bibliotheken um komplexer werdende Software in verschiedene Module aufzuteilen. Wie auch unter Linux ist das aber so ein Sache wenn es dann um die Verteilung des gesamten Produkts geht. Die von Windows bekannte Side-by-Side-Execution greift leider nicht und somit such der Library-Loader eben nicht im  lokalen Verzeichnis nach der Datei. Also was tun. Apple hat zu diesem Zweck dsa Konzept der Bundles. Bundles sind eigentlich nur festgesetzte Verzeichnisstrukturen, die sowieso hinter jeder Applikation die mit XCode erzeugt wird, stehen. In diese Struktur wird die Library an eine bestimmte Stelle gelegt und der Build-Prozess angepasst. Hierzu sind folgende Schritte nötig:&lt;br /&gt;
&lt;br /&gt;
1. Library-Settings so anpassen das beim Linken immer relativ vom Verzeichnis des Executables referenziert wird.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/dirksblog/2811/r_libsettings.jpg"&gt;&lt;img alt="" src="http://geekswithblogs.net/images/geekswithblogs_net/dirksblog/2811/r_libsettings.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Hierfür legt man in den Project-Settings des XCode-Projektes den Install-Path der Library wie folgt fest: @executable_path/../Frameworks/yourlib.dylib.&lt;br /&gt;
&lt;br /&gt;
2. Einfühurng eines Custom-Build-Steps beim Erzeugen der eigentlichen Software einführen um die benötigten Libraries zu kopieren.&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/dirksblog/2811/r_buildstep.jpg" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
Hierfür nehmen wir die Croos-Referenz auf das Library-Projekt aus dem letzen Beitrag wieder her und ziehen die sich darin befindliche .dylib auf den eben erzeugte Custom-Build-Step (sieh Abbildung).&lt;br /&gt;
&lt;br /&gt;
Wird nun das Hauptprojekt erzeugt, entsteht immer ein Applikations-Bundle was via Drag-n-Drop vom Benutzer installiert werden kann ohne das aufwändig Setupskripte Libraries an andere Stellen kopieren müssen. Das ganze ist dann nun nur noch hübsch in ein Disk-Image zu verpacken und fertig für den Rollout.&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119345"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119345" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dirksblog/aggbug/119345.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dirk Eisenberg</dc:creator>
            <guid>http://geekswithblogs.net/dirksblog/archive/2008/02/07/119345.aspx</guid>
            <pubDate>Wed, 06 Feb 2008 23:03:02 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/dirksblog/comments/119345.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/dirksblog/archive/2008/02/07/119345.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dirksblog/comments/commentRss/119345.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/dirksblog/services/trackbacks/119345.aspx</trackback:ping>
        </item>
        <item>
            <title>dylib - Cross Project Dependencies</title>
            <link>http://geekswithblogs.net/dirksblog/archive/2008/01/27/118955.aspx</link>
            <description>Nachdem ich die ersten Schritte auf meinem Mac erfolgreiche gegangen bin, rückt das erste Mac OS X - Projekt in Objective-C immer näher. Heute habe ich mich dann mit der korrekten Aufteilung meiner Software in verschiedene Libraries beschäftigt. Nun stand ich vor dem Problem wie sagt man XCode das man auf ein anderes Projekt verweisen möchte und erzeugt dabei eine korrekte Abhängigkeit für den Linker. Dieser soll natürlich die dynamische Library in Abhängigkeit der eingestellten Konfiguration nutzen. Die Antwort ist einfach aber nicht offensichtlich.&lt;br /&gt;
&lt;br /&gt;
1. Cross Project Dependencies&lt;br /&gt;
&lt;br /&gt;
Zuerst muss das referenzierte Projekt in den XCode-Baum eingebaut werden. Hierzu muss lediglich über das Kontext-Menu (Add-&amp;gt;Existing Files) das entsprechende ausgewählt werden.&lt;br /&gt;
&lt;br /&gt;
2. Referenziertes Projekt in den Linker einbinden&lt;br /&gt;
&lt;br /&gt;
Jetzt kann das referenzierte Projekt im Tree-View über den kleinen Pfeil aufgeklappt werden. Es werde daduch alle Produkte des Projektes sichbar. &lt;br /&gt;
&lt;br /&gt;
Einfach die entsprechende Library auswählen und zum linken durch den Hacken am rechten Zeilenende setzen:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/dirksblog/2811/o_xcode_cr3.jpg"&gt;&lt;img src="http://geekswithblogs.net/images/geekswithblogs_net/dirksblog/2811/o_xcode_cr3.jpg" style="width: 480px; height: 315px;" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Danach wird XCode wie erwartet im Debug-Build die Debug-Lib und im Release-Build die Release-Lib anziehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118955"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118955" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dirksblog/aggbug/118955.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dirk Eisenberg</dc:creator>
            <guid>http://geekswithblogs.net/dirksblog/archive/2008/01/27/118955.aspx</guid>
            <pubDate>Sun, 27 Jan 2008 02:52:29 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/dirksblog/comments/118955.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/dirksblog/archive/2008/01/27/118955.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dirksblog/comments/commentRss/118955.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/dirksblog/services/trackbacks/118955.aspx</trackback:ping>
        </item>
        <item>
            <title>NSApp delegate</title>
            <link>http://geekswithblogs.net/dirksblog/archive/2007/11/11/116771.aspx</link>
            <description>Puh, es ist geschafft - Mein erster Computer von Apple ist da. Wie es sich für einen Software-Menschen gehört wurde natürlich gleich XCode installiert um die Fähigkeiten des Cocoa Frameworks und Objective-C auszuloten. In diesem Post möchte ich die Lösung eines Problems beschreiben welches ich erst nach einigem Suchen lösen konnte.&lt;br /&gt;
&lt;br /&gt;
Was ist das Problem?&lt;br /&gt;
Jede Applikation im Cocoa Framework arbeitet mit einem NSApplication-Objekt (für die MFC Coder eine Art CWinApp). Jetzt möchte ich als Programmierer während der Initialisierungsphase meiner Applikation Code zur Ausführung bringen. Das ist ganz nützlich um Variable oder ähnliches anzulegen.&lt;br /&gt;
&lt;br /&gt;
Klar wenn man MFC kennt, oder?&lt;br /&gt;
Klar dachte ich mir, da ich sowas in MFC-Applikationen schon oft erledigt habe. Einfach das CWinApp-Objekt abgeleitet und in InitInstance meine Sachen erledigt, wäre da nicht die Apple Dokumentation.&lt;br /&gt;
&lt;br /&gt;
Delegates&lt;br /&gt;
In der Dokumentation zu NSApplication kann man nachlesen das es sehr gute Gründe geben muss um diese Klasse abzuleiten da hierzu auch einige Funktionen des Frameworks verändert werden müssen. So einfache Dinge wie Variablen initialisieren soll man doch lieber über ein NSApp-Delegate lösen. Gesagt getan und gleich mal etwas über Delegates nachgelesen um auf das nächste Problem zu treffen. Wie bekomme ich die setDelegate-Methode mit meinem Objekt als Parameter so früh ausgeführt?&lt;br /&gt;
&lt;br /&gt;
Die Lösung&lt;br /&gt;
Nach langem Suchen und Probieren ist die Lösung doch denkbar einfach. Der Interface-Designer hält eine Objekt mit dem Namen First-Responder. Zusätzlich legt man sich ein Objekt seiner Klasse die als NSApp-Delegate funktionieren soll an. Diese beiden Objekte kann man jetzt in Beziehung setzen (ctrl + Mouse) und erzeugt somit ein Delegate von NSApplication. Über den Aufruf [NSApp-&amp;gt;delegate myMessage.....] lässt sich mit dem Objekte auch kommunizieren. Natürlich werden alle Delegate-Nachrichten die Implementiert sind auch vom Framework aus angesprochen.
&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116771"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116771" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/dirksblog/aggbug/116771.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dirk Eisenberg</dc:creator>
            <guid>http://geekswithblogs.net/dirksblog/archive/2007/11/11/116771.aspx</guid>
            <pubDate>Sun, 11 Nov 2007 11:37:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/dirksblog/comments/116771.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/dirksblog/archive/2007/11/11/116771.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/dirksblog/comments/commentRss/116771.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/dirksblog/services/trackbacks/116771.aspx</trackback:ping>
        </item>
    </channel>
</rss>